我试图获得一个正则表达式来匹配行首或特定单词之后的单词。我试过:
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
,尽管在多行模式下用法可能有所不同,因为 ^
也将在每个新行的开头匹配 [或者更确切地说,紧接在每个新行之后] 在那种模式下。)
关于python - 为什么 python 正则表达式中的 '\A' 在 [ ] 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18146454/