逃避正则表达式中的逃脱角色无法正常工作

时间:2016-04-22 14:34:52

标签: regex

我有一个正则表达式

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

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

password = '\Gs7iCHE'

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

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

找到匹配的

match = '\\Gs7iCHE'

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

4 个答案:

答案 0 :(得分:2)

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

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

<强> Check

答案 1 :(得分:0)

需要对反斜杠\进行转义以将其包含在字符串中。由于转义的\需要在字符集中进行转义,因此您必须输入\\\\。在第一种情况下,它会逃脱/

此外,其他转义只会使字符串转义,因此您转义魔杖会添加范围!-$

换句话说 - 尝试:

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

无需逃避[

此致

答案 2 :(得分:0)

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

这是好的,但现在你的正则表达式与文字逃脱相匹配 而且由于其内部是一个量化的角色类[\\]+,它已经成为了 匹配目标字符串中的转义次数。

你的目标字符串是\\Gs7iCHE,当然,它与整个事物相匹配。

关于转义单引号字符串的一点注意事项,
解析后,此'\\\''\\\\'相同。即他们俩 成为\\

答案 3 :(得分:0)

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