2012-08-16 67 views
2

爲什麼這不起作用?Python正則表達式:爲什麼這不起作用?

re.sub('\\b[[email protected]](\\W|[[email protected]])*[s5$](\\W|[s5$])*[s5$](\\W|[s5$])*($|\\W)', '*', '@ss') 

我不明白爲什麼@ss*取代。同樣,@55不會被替換。

這些替代:A55,A5S,AS5,屁股

謝謝!

+0

只是澄清s看起來像5和$,'a'看起來像@ – 2012-08-16 23:27:57

+0

不會're.sub(r'[a @] [s5 $] {2}','*','@ass ')'要簡單得多,給出相同的結果,還是我錯過了什麼? – BrtH 2012-08-16 23:36:29

+0

是的,這將工作。但我寫了一個普通的正則表達式,可以用於所有的東西:) – 2012-08-16 23:40:32

回答

2

這是因爲@是不發一言的性格,因此第一\b不匹配。

這是我的建議:

re.sub('(\\ba|@)(\\W|[[email protected]])*[s5$](\\W|[s5$])*[s5$](\\W|[s5$])*($|\\W)', '*', '@ss') 

(與(\ba|@)更換\b[[email protected]]

+0

我明白了。謝謝 – 2012-08-16 23:34:09

0

如果你想一種「褻瀆」的檢查 - 我想借此邏輯了正則表達式。

look_alike = {'@': 'A', '$': 'S'} 
test_string = ''.join(look_alike.get(c, c) for c in your_string.upper()) # also look at `string.translate` 

然後if 'ASS' in test_string - 或者與使用re的詞邊界類似。

相關問題