我有一个正则表达式
regex = '[w!-$%^&*()_+|~=`{}[]:";'<>?,.@#\/]+'
例如,当我尝试将正则表达式与字符串匹配时
password = 'Gs7iCHE'
找不到匹配项,但是当我将正则表达式更改为
regex = '[w!-$%^&*()_+|~=`{}[]:";'<>?,.@#\\/]+'
它找到一个匹配项,该匹配项是
match = '\Gs7iCHE'
我不知道为什么会有这样的行为。
您的正则表达式是正确的。在正则表达式之前使用原始字符串r
,它将正常工作
re.compile(r'[w!-$%^&*()_+|~=`{}[]:";'<>?,.@#\/]+')
检查
斜杠需要转义才能将其包含在字符串中。而且由于转义
需要在字符集中转义,因此您必须输入
\\
.在第一种情况下,它逃脱了/
此外,其他转义只是使字符串转义,因此您转义棒增加了一个范围!-$
。
换句话说 - 尝试:
regex = '[\w!\-$%^&*()_+|~=`{}[\]:";'<>?,.@#\\/]+'
无需逃脱[
.
问候
当您将正则表达式更改为第二个正则表达式时\\
解析为单引号字符串的\
。
这没关系,但现在您的正则表达式与文字转义相匹配。
由于它在一个量化的角色类[\]+
,它正在
以匹配目标字符串中的转义数。
你的目标字符串是\Gs7iCHE
的,果然,它与整个东西匹配。
关于转义单引号字符串需要注意的一件事,
此'\'
与解析后的'\\'
相同。也就是说,他们都
成为\
.
在javascript中,我曾经遇到过这种问题。在JavaScript(和许多其他语言)中,RegExp由斜杠分隔,后跟模式标志。如果要使用转义字符,则必须在 // 中包含正则表达式。