我对正则表达式中的反斜杠感到困惑。在正则表达式中,a\
具有特殊含义,例如\d
表示十进制数字。如果在反斜杠前面添加反斜杠,则该特殊含义会丢失。在正则表达式中,可以阅读:
也许最重要的元字符是反斜杠
\
。与Python字符串文字一样,反斜杠后可以跟各种字符,以表示各种特殊序列。它也用于转义所有元字符,因此您仍可以按模式匹配它们。例如,如果您需要匹配[
或\
,则可以在它们前面加上反斜杠以删除其特殊含义:\[
或\\
。
因此print(re.search('\d', '\d'))
给出,None
因为\d
匹配任何十进制数字,但中没有\d
。
我现在希望print(re.search('\\d', '\d'))
能匹配,\d
但答案仍然是None
。
仅print(re.search('\\\d', '\d'))
作为输出给出<_sre.SRE_Match object; span=(0, 2), match='\\d'>
。
有人有解释吗?
造成混淆的原因是反斜杠字符\
在两个不同的级别上用作转义符。首先,Python解释器本身会\
在re
模块看到您的字符串之前执行的替换。例如,\n
将其转换为换行符,\t
将其转换为制表符,等等。要获得实际的\
字符,您也可以对其进行转义,从而\\
给出一个\
字符。如果后面的字符\
不是公认的转义字符,则该字符\
会像其他任何字符一样被处理并通过,但是我不建议以此为依据。相反,请始终\
通过将字符加倍来逃脱字符,即\\
。
如果要查看Python如何扩展字符串转义符,只需打印出字符串即可。例如:
s = 'a\\b\tc'
print(s)
如果s
是集合数据类型(例如列表或元组)的一部分,并且如果您打印该集合,Python会将字符串用单引号引起来,并将\
转义符(以规范形式)包括在内,因此请注意字符串的用法正在打印。如果仅在解释器中输入带引号的字符串,它还将显示用引号引起来的\
转义符。
一旦知道了字符串的编码方式,便可以考虑re
模块将如何处理它。例如,如果要转义\
到传递给re
模块的字符串中,则需要传递\\
给re
,这意味着您需要\\\\
在带引号的Python字符串中使用。Python字符串将以结尾,\\
并且re
模块会将其视为单个文字\
字符。
\
在Python字符串中包含字符的另一种方法是使用原始字符串,例如r'a\b'
等效于"a\\b"
。
问题内容: 我想构建一个JS函数,将一个参数列表隐藏到有效路径中(因为我不确定路径的一部分是否带有斜杠) 这是功能: 使用的RegEx匹配了http://regexpal.com上的所有开始和结束斜杠和反斜杠,但是该功能无法正常工作(RegEx不匹配)。此外,Chrome指出 语法错误:无效的正则表达式:/()$ | ^()/:未终止的组 当我只使用RegEx 但是,使用RegEx 提前致谢! 狮
我正在尝试用单个反斜杠替换所有双反斜杠。我想将替换为。我以为python将视为一个反斜杠,将视为带有两个反斜杠的字符串。但是当我尝试时 因此,我尝试用原始字符串切换替换字符串: 这不是我需要的。所以我只尝试了原始字符串中的一个反斜杠:
问题内容: 出于好奇,我试图找出哪一种是在PHP正则表达式模式中使用反斜杠的正确方法: 测试01:(3个反斜线) 测试02:(4个反斜线) 根据下面的文章,4应该是正确的方法,但令我困惑的是两个测试都返回了一个匹配项。如果两者都正确,那么4是首选方式吗? 问题答案: 事实是,您正在使用字符类,因此无论嵌入多少文字反斜杠都无关紧要,它将被视为单个反斜杠。 例如以下两个正则表达式: 就正则表达式引擎而
问题内容: 测试另一个用户的问题的答案时,我发现了一些我不理解的东西。问题是用一个空格替换字符串中的所有文字字符。 现在,我尝试的第一个模式是: 令人惊讶的是,这没有用。我在Perl中尝试了相同的模式,但效果很好。经过一番尝试和错误后,我发现PHP希望该模式匹配3或4个反斜杠,如下所示: 要么 这些模式-令我惊讶的-都有效。为什么需要这些额外的反斜杠? 问题答案: 您需要4个反斜杠来表示正则表达式
如何写一个正则表达式来匹配这个< code>\"(一个反斜杠然后一个引号)?假设我有这样一个字符串: 我需要将所有替换为,因此结果如下所示: 这个不起作用:因为它只匹配引号。不知道如何使用反斜杠。我本可以先删除反斜杠,但我的字符串中还有其他反斜杠。
问题内容: 如何编写一个正则表达式来匹配它(反斜杠然后是引号)?假设我有一个像这样的字符串: 我需要将所有替换为,因此结果如下所示: 这是行不通的:因为它只匹配引号。不确定如何使用反斜杠。我本可以先删除反斜杠,但字符串中还有其他反斜杠。 问题答案: 如果你 不需要任何像预定义的字符类\ d,量词等正则表达式的机制 ,而不是其预期正则表达式使用其预计文字 两种方法都将替换 所有 出现的目标,但是将按