こんにちは。sinyです。
この記事ではpythonの正規表現を使ったテクニックに関するまとめ記事です。
※随時更新します。
正規表現にマッチする文字を除去する。
ある文字列から特殊文字を削除する場合に正規表現を使うと簡単に処理することができます。
- ignores = re.compile("[.,-/\"'>()&;:]") →排除対象の文字列を正規表現として定義
- ignores.match(w): →変数wの文字列が正規表現にマッチするかチェック
- words = [w for w in words if w] →特殊文字を排除した後は空白「""」が含まれているため
空白ではない部分だけをwords変数に格納して空白を除去しています。
import re ignores = re.compile("[.,-/\"'>()&;:]") sentense = "i run,in the (short) - term; 0, 19, 1.1> Tokyo 's / loss: might 2.3 be . we like The food & U " def trim(word): # 文字列をすべて小文字に変換&空白削除 w = word.strip() # ignores(正規表現)にマッチした文字は削除 if ignores.match(w): return "" #そうでなければそのまま返す。 return w print("変換前:",sentense) words = [trim(w) for w in sentense] print("変換後1:",words) words = [w for w in words if w] print("変換後2:",words) words = list(set(words)) print("重複排除後", words)
実行結果
- 変換前: i run,in the (short) - term; 0, 19, 1.1> Tokyo 's / loss: might 2.3 be . we like The food & U
- 変換後1: ['i', '', 'r', 'u', 'n', '', 'i', 'n', '', 't', 'h', 'e', '', '', 's', 'h', 'o', 'r', 't', '', '', '', '', 't', 'e', 'r', 'm', '', '', '0', '', '', '1', '9', '', '', '1', '', '1', '', '', 'T', 'o', 'k', 'y', 'o', '', '', 's', '', '', '', 'l', 'o', 's', 's', '', '', 'm', 'i', 'g', 'h', 't', '', '2', '', '3', '', 'b', 'e', '', '', '', 'w', 'e', '', 'l', 'i', 'k', 'e', '', 'T', 'h', 'e', '', 'f', 'o', 'o', 'd', '', '', '', 'U', '']
- 変換後2: ['i', 'r', 'u', 'n', 'i', 'n', 't', 'h', 'e', 's', 'h', 'o', 'r', 't', 't', 'e', 'r', 'm', '0', '1', '9', '1', '1', 'T', 'o', 'k', 'y', 'o', 's', 'l', 'o', 's', 's', 'm', 'i', 'g', 'h', 't', '2', '3', 'b', 'e', 'w', 'e', 'l', 'i', 'k', 'e', 'T', 'h', 'e', 'f', 'o', 'o', 'd', 'U']
- 重複排除後 ['u', 't', 'T', 'b', 'l', 'f', 'm', 'k', '1', 'w', 'r', 'h', 'i', '0', 'y', 'd', '9', 'n', 's', 'U', 'g', '3', '2', 'e', 'o']
正規表現で文字列を分割したい場合
re.splitを使います。
sentense = "あいうえお。かきくけこ。さしすせそ。abb" re.split('。', sentense) ['あいうえお', 'かきくけこ', 'さしすせそ', 'abb']
。(?!」は、「。」の後に「」」が続かない時に条件が成立してsplitする。
re.split('。(?!」)|\n', re.sub(' ', '', string))
(?! ...)は、次に続く文字列が...にマッチしないとTrueとなる。