0

これは非常に単純に聞こえますが、何らかの理由で必要なすべての結果を得ることができません

この場合の単語は、たとえば次の文字列のように、空白で区切られた空白以外の任意の文字です。結果は次のようになります: ['Hello','there','stackoverflow.']

私のコード:

import re

word_pattern = "^\S*\s|\s\S*\s|\s\S*$"
result = re.findall(word_pattern,text)
print result

しかし、私が示したように文字列でこのパターンを使用した後、リストの最初と最後の単語のみが配置され、2 つのスペースで区切られた単語は配置されません

このパターンの問題点は何ですか?

4

4 に答える 4

6

\b代わりに境界テストを使用します。

r'\b\S+\b'

結果:

>>> import re
>>> re.findall(r'\b\S+\b', 'Hello there StackOverflow.')
['Hello', 'there', 'StackOverflow']

または、正規表現をまったく使用せずに.split();を使用します。後者文中に句読点を含みます (上記の正規表現は.文中の と一致しませんでした)。

于 2013-01-03T11:40:01.940 に答える
2

文字列内のすべての単語を検索するにはsplit

>>> "Hello there stackoverflow.".split()
['Hello', 'there', 'stackoverflow.']

ただし、正規表現を使用する必要がある場合は、正規表現をより単純で高速なものに変更する必要がありますr'\b\S+\b'

  • r文字列を「生の」文字列に変換します。つまり、文字をエスケープしません。
  • \bスペース、改行、または句読点である境界を意味します。
  • \Sあなたが知っておくべきは、空白以外の文字です。
  • +前の 1 つまたは複数を意味します。

したがって、一緒に表示されるすべての文字セット (単語/数字) を見つけることを意味します。

于 2013-01-03T11:39:51.013 に答える
0

他の答えは良いです。必要に応じて (句読点やその他の単語以外の文字を含める/除外するなど)、正規表現を使用して 1 つ以上の空白文字で分割することもできます。

re.split(r'\s+', 'Hello there   StackOverflow.')
['Hello', 'There', 'StackOverflow.']
于 2013-01-03T11:45:35.477 に答える
0

単に使用するのはどうですか -

>>> s = "Hello there stackoverflow."
>>> s.split()
['Hello', 'there', 'stackoverflow.']
于 2013-01-03T11:40:51.313 に答える