我有三个字符串:

s1 = "A blah blah blah."             # match A
s2 = "Blah blah blah. A blah blah."  # match A
s3 = "Blah blah blah A."             # don't match 'A'


我正在尝试编写一个正则表达式,以匹配前两个字符串中A的出现,但不匹配第三个字符串:即,我想匹配行或句子开头的A出现,但是没有其他地方。

我尝试了以下正则表达式:

regex = "(^|(. ))A"
regex = "[^(. )]A"


使用re.search(),其中第一个匹配所有三个A。第二个都不匹配。

我正在使用Python 3.5。

最佳答案

您几乎正确。 "(^|\. )A"有效。您必须转义点,因为它在正则表达式中表示“任何字符”。

>>> s1 = "A blah blah blah."             # match A
... s2 = "Blah blah blah. A blah blah."  # match A
... s3 = "Blah blah blah A."             # don't match 'A'
>>> import re
>>> re.search("(^|\. )A", s1)
<_sre.SRE_Match object; span=(0, 1), match='A'>
>>> re.search("(^|\. )A", s2)
<_sre.SRE_Match object; span=(14, 17), match='. A'>
>>> re.search("(^|\. )A", s3)


如果希望它使用更多的标点符号,则可以使用字符类。然后,您不必逃脱。

>>> re.search("(^|[.!?]) A", 'Good? Ay.')
8: <_sre.SRE_Match object; span=(4, 7), match='? A'>

10-01 06:31
查看更多