簡體   English   中英

為什么正則表達式“[\\ A] abc”與python中的“abc”不匹配

[英]Why regex “[ \A]abc” doesn't match “abc” in python

我想匹配一個空格或一個字符串的開頭,使用字符串“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”代表“\\ A僅在字符串的開頭匹配”。 如下所示,正則表達式“[\\ A] abc”匹配“abc”,但與python中的“abc”不匹配。

>>> re.search(r"[ \A]abc", "babc")
>>> re.search(r"[ \A]abc", "abc")
>>> re.search(r"[ \A]abc", " abc")
<_sre.SRE_Match object at 0xb6fccdb0>

不幸的是, \\A不代表一個字符或一組字符。 因此,它(和類似的\\Z )不能在字符類( [] )中使用。 如果你把它放在一個角色類中,那么它將被默默地視為大寫A.

要匹配空格或字符串的開頭,您可以使用替換: (?:\\A| )abc (我使用非捕獲組(?:) )。

如果要匹配字符串的開頭,可以使用anchor ^ 所以,如果你想在開頭或abc有一個空格,你可以使用這個正則表達式:

^\s?abc

工作演示

\\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']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM