作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在从一些网站学习正则表达式,但在理解元字符的用法和原始字符串中反斜杠的用法时遇到一些困难。
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,输出会是什么?我知道 + 表示“一次或多次重复”。
最佳答案
当你这样做时:
r"(.+) \1"
意味着\1
应该与第一组捕获的内容完全匹配。它与 "abc cde"
不匹配,因为第一组捕获了 abc
,所以就像您正在匹配以下内容:re.match(r'abc abc',文本)
。这叫回引用一组。
例如,您需要匹配以相同字母开头和结尾的文本:
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
或more 后面跟着 t
。
ca+t
匹配 ct, cat , caaaaat
:匹配 c
后跟零个或多个 a
随后是t
关于python - 元字符和反斜杠在这里做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58457874/
我是一名优秀的程序员,十分优秀!