私はこれをやろうとしている:regexesを使って単語境界で分割するにはどうすればよいですか?
import re
sentence = "How are you?"
print(re.split(r'\b', sentence))
結果は
[u'How are you?']
ている私は[u'How', u'are', u'you', u'?']
ような何かをしたいです。これはどのように達成できますか?
私はこれをやろうとしている:regexesを使って単語境界で分割するにはどうすればよいですか?
import re
sentence = "How are you?"
print(re.split(r'\b', sentence))
結果は
[u'How are you?']
ている私は[u'How', u'are', u'you', u'?']
ような何かをしたいです。これはどのように達成できますか?
残念ながら、Pythonは空の文字列で分割できません。
これを回避するには、split
の代わりにfindall
を使用する必要があります。
実際には\b
は単語境界を意味します。
(?<=\w)(?=\W)|(?<=\W)(?=\w)
に相当します。意味
、次のコードは動作します:
import re
sentence = "How are you?"
print(re.findall(r'\w+|\W+', sentence))
さて、OPには、空白だけのトークンは必要ありません。 –
'\ b'で分割すると、空白も生成されます。なぜなら、' \ b'は長さがゼロであるからです。 –
私が意味するのは、 '\ w + | [^ \ w \ s] +'がもっと適切かもしれないということです。 –
import re
split = re.findall(r"[\w']+|[.,!?;]", "How are you?")
print(split)
出力:
['How', 'are', 'you', '?']
正規表現説明:
"[\w']+|[.,!?;]"
1st Alternative: [\w']+
[\w']+ match a single character present in the list below
Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
\w match any word character [a-zA-Z0-9_]
' the literal character '
2nd Alternative: [.,!?;]
[.,!?;] match a single character present in the list below
.,!?; a single character in the list .,!?; literally
http://stackoverflow.com/a/367292/6211883 –
オーダーが同じ場合でもかなり疑わしいものになります。 –
なぜ '' '文字を含めましたか? – oarfish
[Pythonは空の文字列で分割することができない(https://mail.python.org/pipermail/tutor/2003-August/024753 .html)。 –
また、 '[u'How '、u' '、u'are'、u ''、u'you '、u'?']' –
@KennyLauはい、正しいが、それは重要ではない、私は空白のいずれかで返されるか無視されたので、それはフィルタリングは些細なので大丈夫です。 – oarfish