2017-01-30 11 views
0

次の正規表現を使用して、文字列として渡された句を単語のリストに分割しています。分割時のPythonの再追加

他の文字がある可能性があるため、私はUTFフラグを使用しています。これは、ほとんどの場合、素晴らしい作品:周り

phrase = 'hey, my spacebar_is broken.' 
word_list [u'hey', u'my', u'spacebar', u'is', u'broken', u''] 

私の仕事:フレーズは、このような期間で終わる文であれば、

​​

しかし、それは、リスト内のブランク値を作成します。 re.split(r'[\W_]+', unicode(phrase.strip('.'), 'utf-8').lower(), flags=re.U) を使用することですが、私は正規表現の中でそれを解決する方法があったのですか?

+0

可能な重複http://stackoverflow.com/questions/:

word_list = [word for word in word_list if word] 

また、あなたはそれらをマッチング直接ではなく、分割した単語を取得することができます16840851/python-regex-split-without-empty-string) – niemmi

答えて

2

\Wは、非ワード文字を選択します。 .は単語以外の文字であるため、文字列は分割されます。期間の後には何もないので、空の文字列が得られます。あなたはこれを避けたい場合は、文字列

phrase = re.sub(r'^[\W_]+|[\W_]+$', '', phrase) 

または空の文字列を削除するには結果の配列をフィルタリングの両端の区切り文字を削除するか必要があります。

words = re.findall(r'[^\W_]+', phrase) 
[空の文字列なしでPythonの正規表現の分割](の
+0

'findall'メソッドを使用すると、subを使用しようとするよりはるかにクリーンです。それはデフォルトでリストを返します。これは私が望んでいたものであり、誤って戻ってくるのに 'split 'が必要だと思っていました。 – manisha

関連する問題