当前位置: 首页 > 面试题库 >

对正则表达式中的反斜杠感到困惑

东典
2023-03-14
问题内容

我对正则表达式中的反斜杠感到困惑。在正则表达式中,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,量词等正则表达式的机制 ,而不是其预期正则表达式使用其预计文字 两种方法都将替换 所有 出现的目标,但是将按