我正在某个网站上学习正则表达式,但在理解元字符的用法和原始字符串中反斜杠的用法时遇到了一些麻烦。
import re
pattern = r"(.+) \1"
match = re.match(pattern, "word word")
if match:
print ("Match 1")
match = re.match(pattern, "?! ?!")
if match:
print ("Match 2")
match = re.match(pattern, "abc cde")
if match:
print ("Match 3")
我的主要疑问是在这里使用(。+)以及使用了反斜杠。如果不是1而是2,那么输出将是什么?我知道+表示“一个或多个重复”。
答案 0 :(得分:2)
执行此操作时:
r"(.+) \1"
表示\1
应该与第一组所捕获的完全匹配。它与"abc cde"
不匹配,因为第一组捕获了abc
,因此就像您在匹配re.match(r'abc abc', text)
。
这个叫回参考组。
例如,您需要匹配一个以相同字母开头,结尾为结尾的文本:
import re
pattern = r"(\w).+\1"
match = re.match(pattern, "ABA") # OK
match = re.match(pattern, "ABC") # NO
另一个示例匹配文本,该文本以3个字母开头,并以相反的顺序以此字母结尾
import re
pattern = r"(\w)(\w)(\w)\3\2\1"
re.match(pattern, 'ABCCBA') # OK
re.match(pattern, 'ABCCBC') # NO
注意:您只能向后引用捕获组,这意味着(?:.+) \1
无效,因为
第一组会匹配并且不会捕获任何东西,因此您不能向后引用它。
编辑
+
匹配一次或多次,至少需要出现一次*
匹配零次或多次 ca+t
匹配cat, caat , caaat
:匹配c
,然后匹配至少一个a
,再匹配t
。
ca+t
匹配ct, cat , caaaaat
:匹配c
,后跟零个或多个a
,后跟t