1

Python の正規表現を学習しています。この問題について最初に助けてくれた Jerry に感謝します。私はこの正規表現をテストしました:

(\b\w+\b)?[^a-z]*(\b\w+\b)?[^a-z]*(\b\w+\b)?[^a-z]*(\b\w+\b)?[,;]\s*(\b\w+\b)?[^a-z]*(\b\w+\b)?[^a-z]*(\b\w+\b)?[^a-z]*(\b\w+\b)?

http://regex101.com/で、私が探しているものを見つけます。それは、文のコンマの前にある 4 つの単語と、コンマの後の 4 つの単語です。文頭のコンマの前に 2 つの単語が 3 つある場合、クラッシュすることはありません。私が使用しているテスト文は次のとおりです。

waiting for coffee, waiting for coffee and the charitable crumb.

現在、正規表現は次を返します。

[('waiting', 'for', 'coffee', '', 'waiting', 'for', 'coffee', 'and')]

セットの 4 番目のメンバーが空である理由がよくわかりません。私が望むのは、正規表現がこの場合、コンマの前の 3 とコンマの後の 4 のみを返すことですが、コンマの前に 4 つの単語がある場合は、4 を返すようにします。正規表現は言語によって異なることは知っていますが、これは Python に欠けているものですか?

4

3 に答える 3

2

正規表現を整理する方法についての答えが得られたので、Python ではそれを指摘します。通常、このようなことははるかに簡単に実行でき、組み込みの文字列関数を使用して読み取ることができます。

s = 'waiting for coffee, waiting for coffee and the charitable crumb.'
before, after = map(str.split, s.partition(',')[::2])
print before[-4:], after[:4]
# ['waiting', 'for', 'coffee'] ['waiting', 'for', 'coffee', 'and']
于 2013-07-16T13:16:13.527 に答える