2016-04-22 72 views
1

我有一個正則表達式轉義正則表達式轉義字符不工作

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

當我嘗試用一​​個字符串匹配正則表達式例如

password = '\Gs7iCHE' 

沒有找到匹配的,但我當將正則表達式更改爲

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

它發現匹配是

match = '\\Gs7iCHE' 

我不知道爲什麼這種行爲是這樣。

+1

你使用的是什麼正則表達式? – anubhava

+0

「在大多數正則表達式中,字符類中唯一的特殊字符或元字符是右括號(]),反斜線(\),插入符號(^)和連字符( - )。通常的元字符是普通字符在一個字符類中,並且不需要被反斜槓轉義。「 –

+0

如果您使用PCRE,它看起來不喜歡最後一個「/」:https:// regex101。com/r/rI0vW6/1 –

回答

2

你的正則表達式是正確的。正則表達式前使用原始字符串r,它會正常工作

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

Check

0

需要將反斜槓\轉義爲字符串。並且由於逃逸的\需要在字符集中轉義,所以您必須輸入\\\\。在你的第一種情況下,它逃脫/

此外,其他逃脫只是使字符串轉義,因此你逃脫魔杖添加範圍!-$

換句話說 - 嘗試:

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

無需躲避[

Regards

+0

正則表達式是正確的,但它仍然返回雙'\\'在密碼字符串這是我的問題。 – Tega

0

當你改變了你的正則表達式來第二個\\\\
解析爲\\單引號字符串。

這是好的,所有,但現在你的正則表達式匹配文字轉義。
而且由於其內部是一個量化字符類別[\\]+,因此它會去
以匹配目標字符串中的許多轉義字符。

你的目標字符串是\\Gs7iCHE,果然,它匹配整個事情。

有一點需要注意逃逸單引號字符串,
'\\\'是相同的'\\\\'解析後。即,他們都
成爲\\