[英]Why my pattern doesn't work? re.match(“abc*bcd*”, “abc/blahblah/bcd/adf”)
[英]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
(我使用非捕獲組(?:)
)。
\\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.