正規表現を使用してテキスト内の小さな単語を削除することは可能ですか?たとえば、次の文字列(テキスト)があります。
anytext = " in the echo chamber from Ontario duo "
3文字以下の単語をすべて削除したいのですが。結果は次のようになります。
"echo chamber from Ontario"
正規表現やその他のPython関数を使用してそれを行うことは可能ですか?
ありがとう。
とにかく、この単純な例の正規表現は必要ないと思います...
' '.join(word for word in anytext.split() if len(word)>3)
確かに、それもそれほど難しいことではありません:
shortword = re.compile(r'\W*\b\w{1,3}\b')
上記の式は、単語以外の文字(基本的に空白または開始文字)が前にあり、1〜3文字短く、単語の境界で終わる単語を選択します。
>>> shortword.sub('', anytext)
' echo chamber from Ontario '
ここ\b
では境界の一致が重要です。境界の一致により、単語の最初または最後の3文字だけが一致しないようになります。
冒頭の\W*
atを使用すると、単語とその前の単語以外の文字の両方を削除して、文の残りの部分が一致するようにすることができます。句読点はに含まれていることに注意してください。先行する空白のみを削除する場合\W
に使用します。\s
この正規表現ソリューションは、残りの単語の間に余分な空白を保持しますが、mgilsonのバージョンでは、複数の空白文字を1つのスペースにまとめます。それがあなたにとって重要かどうかわからない。
彼のリスト内包表記の解決策は、2つのうちの速い方です。
>>> import timeit
>>> def re_remove(text): return shortword.sub('', text)
...
>>> def lc_remove(text): return ' '.join(word for word in text.split() if len(word)>3)
...
>>> timeit.timeit('remove(" in the echo chamber from Ontario duo ")', 'from __main__ import re_remove as remove')
7.0774190425872803
>>> timeit.timeit('remove(" in the echo chamber from Ontario duo ")', 'from __main__ import lc_remove as remove')
6.4250049591064453