我有一个正则表达式
regex = '[\w!\-$%^&*()_+|~=`{}\[\]:";\'<>?,.@#\\/]+'
当我尝试将正则表达式与字符串匹配时,例如
password = '\Gs7iCHE'
找不到匹配但是当我将正则表达式更改为
时regex = '[\w!\-$%^&*()_+|~=`{}\[\]:";\'<>?,.@#\\\\/]+'
找到匹配的
match = '\\Gs7iCHE'
我不知道为什么这种行为会这样。
答案 0 :(得分:2)
你的正则表达式是正确的。在正则表达式之前使用原始字符串r
,它将正常工作
re.compile(r'[\w!\-$%^&*()_+|~=`{}\[\]:";\'<>?,.@#\\/]+')
<强> Check 强>
答案 1 :(得分:0)
需要对反斜杠\
进行转义以将其包含在字符串中。由于转义的\
需要在字符集中进行转义,因此您必须输入\\\\
。在第一种情况下,它会逃脱/
此外,其他转义只会使字符串转义,因此您转义魔杖会添加范围!-$
。
换句话说 - 尝试:
regex = '[\\w!\\-$%^&*()_+|~=`{}[\\]:";\'<>?,.@#\\\\/]+'
无需逃避[
。
此致
答案 2 :(得分:0)
当您将正则表达式更改为第二个\\\\
时
单引号字符串解析为\\
。
这是好的,但现在你的正则表达式与文字逃脱相匹配
而且由于其内部是一个量化的角色类[\\]+
,它已经成为了
匹配目标字符串中的转义次数。
你的目标字符串是\\Gs7iCHE
,当然,它与整个事物相匹配。
关于转义单引号字符串的一点注意事项,
解析后,此'\\\'
与'\\\\'
相同。即他们俩
成为\\
。
答案 3 :(得分:0)
在javascript中,我曾经遇到过这种问题。在JavaScript(和许多其他语言)中,RegExp由斜杠和模式标志定界。 如果要使用转义字符,则必须在 // 中包含正则表达式。