为什么Regex原始字符串前缀“r”不能按预期工作?

2024-04-18 02:56:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我了解到“r"\n"是一个包含'\'和{}的双字符字符串,而"\n"是一个包含换行符的单字符字符串。正则表达式通常使用这种原始字符串表示法用Python代码编写,“r"\n"相当于"\\n"来表示两个字符串'\'和{}。在

我用印刷的方法来测试它,它很管用

>>>print(r"\n") or print("\\n")
'\n'

但是,当我在regex中测试时

^{pr2}$

当我试过的时候,效果很好

>>>re.findall(r"\\d+", '12 cats, 10 dogs, 30 rabits, \d is here')
['\\d']
>>>re.findall("\\\d+", '12 cats, 10 dogs, 30 rabits, \d is here')
['\\d']
>>>re.findall("\\\\d+", '12 cats, 10 dogs, 30 rabits, \d is here')
['\\d']  # Even four backslashes

为什么?这是否意味着我必须在使用regex时再添加一个反斜杠以确保它是一个原始字符串?在

参考号:https://docs.python.org/3/howto/regex.html


Tags: or方法字符串代码rehereis字符
1条回答
网友
1楼 · 发布于 2024-04-18 02:56:44

"\d+"起作用的原因是,"\d"在Python字符串中不是一个正确的转义序列,Python只是将其视为后跟“d”的反斜杠,而不是产生语法错误。在

因此"\d""\\d"和{}都是等价的,它们表示一个包含一个反斜杠和一个d的字符串。regex引擎看到这个反斜杠+“d”并将其解释为“匹配任何数字”。在

另一方面,"\\\d""\\\\d"和{}都包含两个反斜杠,后跟一个“d”。这告诉regex引擎匹配后跟“d”的反斜杠。在

相关问题 更多 >