转义正则表达式中的转义字符不起作用



我有一个正则表达式

regex = '[w!-$%^&*()_+|~=`{}[]:";'<>?,.@#\/]+'

例如,当我尝试将正则表达式与字符串匹配时

password = 'Gs7iCHE'

找不到匹配项,但是当我将正则表达式更改为

regex = '[w!-$%^&*()_+|~=`{}[]:";'<>?,.@#\\/]+'

它找到一个匹配项,该匹配项是

match = '\Gs7iCHE'

我不知道为什么会有这样的行为。

您的正则表达式是正确的。在正则表达式之前使用原始字符串r,它将正常工作

re.compile(r'[w!-$%^&*()_+|~=`{}[]:";'<>?,.@#\/]+')

检查

斜杠需要转义才能将其包含在字符串中。而且由于转义需要在字符集中转义,因此您必须输入 \\ .在第一种情况下,它逃脱了/

此外,其他转义只是使字符串转义,因此您转义棒增加了一个范围!-$

换句话说 - 尝试:

regex = '[\w!\-$%^&*()_+|~=`{}[\]:";'<>?,.@#\\/]+'

无需逃脱[.

问候

当您将正则表达式更改为第二个正则表达式时\\
解析为单引号字符串的\

这没关系,但现在您的正则表达式与文字转义相匹配。
由于它在一个量化的角色类[\]+ ,它正在
以匹配目标字符串中的转义数。

你的目标字符串是\Gs7iCHE的,果然,它与整个东西匹配。

关于转义单引号字符串需要注意的一件事,
'\'与解析后的'\\'相同。也就是说,他们都
成为\.

在javascript中,我曾经遇到过这种问题。在JavaScript(和许多其他语言)中,RegExp由斜杠分隔,后跟模式标志。如果要使用转义字符,则必须在 // 中包含正则表达式。

最新更新