我试图获得一个正则表达式来匹配行首或特定单词之后的单词。我试过:
r"[\A|my_word](smth)"
但它失败了,因为在那种情况下它不匹配\A。这有什么问题吗?
原来\A在[]里面不起作用:
In [163]: type(re.search(r"\A123", "123"))
Out[163]: <type '_sre.SRE_Match'>
In [164]: type(re.search(r"[\A]123", "123"))
Out[164]: <type 'NoneType'>
但我不明白为什么。
我正在使用 Python 2.6.6
编辑: 经过一些评论后,我意识到我使用 [\A|my_word] 的示例是错误的。实际的表达式是 [\AV] 来匹配字符串的开头或 V。我遇到的主要问题是我很好奇为什么 [\A] 不匹配工作。
请您参考如下方法:
我对括号字符类中的反斜杠的理解似乎是错误的,但即便如此,[\A|my_word] 也是如此。相当于[A|my_word]并将尝试匹配 A 中的一个, | , m , y , _ , w , o , r , 或 d之前smth .
这是一个应该做你想做的正则表达式;不幸的是,由于 \A,lookbehind 不能在 Python 中使用。和 my_word具有不同的长度,但可以使用非捕获组代替:(?:\A|abc)(smth) .
(如果需要,您也可以使用 ^ 代替 \A,尽管在多行模式下用法可能有所不同,因为 ^ 也将在每个新行的开头匹配 [或者更确切地说,紧接在每个新行之后] 在那种模式下。)
