1

正規表現をスペースで区切って何度も繰り返したいのですa|b|cが、正規表現は末尾のスペースを受け入れてはなりません:

 "a b c c b"  - ok
 "a b c c b " - not ok

だから私は"(a|b|c)( (a|b|c))+"代わりに持っています"((a|b|c) )+" が、私の正規表現には3つ以上の単語があるため、パターンは長くて読めません。

"^((?:word1|word2|word3|word4|...)(?: (?:word1|word2|word3|word4|...))+)$"

最後のスペースに先読み/先読みメカニズムを使用するか、内部スペースのみに一致するように sth を使用して、短いバージョンについて質問したいだけです。((a|b|c) )+それを達成するためにどのように変更しますか?

4

2 に答える 2

0

パターンに 2 つの類似した場所があります(?:word1|word2|word3|word4|...)。2 つ目はスペースから始まります。(?:word1|word2|word3|word4|...)スペースまたは のいずれかで始めることで、それらを組み合わせることができます^。これにより、重複が回避されます。

>>> compiled = re.compile(r'(?:(?:\s|^)(?:a|b|c))+$')
>>> compiled.match('a b c c b').group(0)
'a b c c b'
>>> compiled.match('a b c c b ')
None
>>> compiled.match('a').group(0)
'a'
>>> compiled.match('a ')
None
于 2013-07-22T11:16:44.653 に答える