我想匹配一个空格或一个字符串的开头,使用字符串" abc"演示:
"abc_some_words" match for "abc" at the start of the string
"some_words abc_some_words" match for there is a space before "abc"
"Aabc" don't match for there is a "A" before "abc"
所以我写了正则表达式" [\ A] abc" for" \ A仅在字符串的开头匹配"。如下所示,regex" [\ A] abc"比赛" abc",但没有匹配" abc"在python中。
>>> re.search(r"[ \A]abc", "babc")
>>> re.search(r"[ \A]abc", "abc")
>>> re.search(r"[ \A]abc", " abc")
<_sre.SRE_Match object at 0xb6fccdb0>
答案 0 :(得分:3)
不幸的是,\A
不代表一个字符或一组字符。因此,它(和类似的\Z
)不能在字符类([]
)中使用。如果你把它放在一个字符类中,那么它将被默默地视为大写A.
要匹配空格或字符串的开头,您可以使用替换:(?:\A| )abc
(我使用非捕获组(?:)
)。
答案 1 :(得分:0)
答案 2 :(得分:0)
\A
- 字符串的开头是\Z
的镜像 - 字符串结尾。
^
和$
的含义可以通过re.M
标志进行修改。它们可以表示^
的字符串的开头或每行的开头; $
可以是字符串的结尾或每行的结尾 - 取决于re.M
标记。
但是,\A
明确地表示字符串的开头,而\Z
明确地表示字符串的结尾。
假设你有字符串:
txt='''\
1 ABC
2 ABC
3 ABC
4 ABC'''
要在每行开头匹配ABC,您可以这样做:
>>> re.findall(r'^\d\sABC', txt, re.M)
['1 ABC', '2 ABC', '3 ABC', '4 ABC']
但如果您只想要第一行和最后一行,您可以这样做:
>>> re.findall(r'\A\d\sABC|\d\sABC\Z', txt, re.M)
['1 ABC', '4 ABC']