Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的原始字符串是否像对\n一样禁用\w或\d之类的元字符?_Python_Regex - Fatal编程技术网

python中的原始字符串是否像对\n一样禁用\w或\d之类的元字符?

python中的原始字符串是否像对\n一样禁用\w或\d之类的元字符?,python,regex,Python,Regex,我是Python新手。有人能告诉我这两个正则表达式语句(re.findall(r“\d+”,“我35岁”)和(re.findall(“\d+”,“我35岁”))之间有什么区别吗 我知道第一条语句中的原始字符串将使“\d+”处于非活动状态,因为这是原始字符串的主要作用-使转义字符处于非活动状态。换句话说,如果使用原始字符串,则“\d+”将不是用于查找/搜索/匹配数字的元字符。然而,我现在看到这两个语句返回相同的结果 Python解析器和正则表达式解析器都处理转义序列。这意味着两个引擎支持的任何转义

我是Python新手。有人能告诉我这两个正则表达式语句(re.findall(r“\d+”,“我35岁”)和(re.findall(“\d+”,“我35岁”))之间有什么区别吗

我知道第一条语句中的原始字符串将使“\d+”处于非活动状态,因为这是原始字符串的主要作用-使转义字符处于非活动状态。换句话说,如果使用原始字符串,则“\d+”将不是用于查找/搜索/匹配数字的元字符。然而,我现在看到这两个语句返回相同的结果

Python解析器和正则表达式解析器都处理转义序列。这意味着两个引擎支持的任何转义序列必须要么使用双斜杠,要么使用原始字符串文字,这样Python解析器就不会试图解释转义序列

在本例中,
\d
对Python没有任何意义,因此反斜杠保留在适当的位置,以便
re
模块处理。所以在这里,这两个片段没有区别

但是,如果您需要在正则表达式中的其他文本(如
section
)之前匹配文本反斜杠,而不使用原始字符串,则必须使用
'\\\\section'
来定义模式!这是因为Python解释器将
'\\section'
视为产生单个反斜杠的转义序列,然后正则表达式解析器将看到转义序列
\s
的开头


请参阅Python正则表达式HOWTO中的。

必读内容:您好,谢谢。我仍然无法理解为什么我需要使用“\\\\”来匹配字符串中的文字反斜杠。@PankajKulkarni:
'\section'
不是有效的Python转义,因此在正则表达式中可以看到一个元字符
\s
'\\section'
成为值中的单个
',因此
'\section'`被传递给正则表达式引擎,它仍然看到一个元字符
\s
。只有
'\\\\section'
成为值
\\\section
,因此现在正则表达式引擎将
\`视为与
section`部分分开的反斜杠。