0

私はcsの初心者で、現在、次のようなPython正規表現パターンを取得するために取り組んでいます:

it must contain "stop (at most 10 words inbetween) mail" and do not contain "mail stop".

つまり、

  "please stop the mail, and I want the mail stop" AND "please stop the mail stop" would be rejected. ("mail stop" pattern spotted)


  "please stop the mail" AND "please stop the mail, I want the mail to stop" both would be accepted.(only "stop ~ mail" pattern is seen, and no "mail stop")

私が現在持っているものは次のとおりです。

import re
pattern = re.compile("(?=(stop\s+(\w+\s+){0,10}mail[^\s]*))(?!mail\s+stop)")
print(pattern.search("please stop the mail, I want the mail to stop").group())

しかし、どういうわけかそれは私が望むようには機能しません。

どんな助けでも大歓迎です。

エリック

4

1 に答える 1

1

一致した場合に入力文字列全体を返す必要があると仮定します

>>> pattern = re.compile(".*stop\s+(\w+\s+){0,10}mail(?!(\s+stop|(.*mail stop))).*")
>>> print(pattern.search("please stop the mail, I want the mail to stop"))
<_sre.SRE_Match object at 0x15c43c0>
>>> print(pattern.search("please stop the mail stop"))
None
>>> print(pattern.search("please stop the mail, and I want the mail stop"))
None
于 2012-07-24T01:03:10.657 に答える