2010-11-05 56 views

回答

24

你可以只用一個否定的字符類,而不是:

re.compile(r"[^a-zA-Z0-9-]") 

這將匹配任何不在字母範圍或一個連字符。根據您當前的正則表達式,它也匹配下劃線。

>>> r = re.compile(r"[^a-zA-Z0-9-]") 
>>> s = "some#%te_xt&with--##%--5 hy-phens *#" 
>>> r.sub("",s) 
'sometextwith----5hy-phens' 

請注意,這也取代了空格(這當然可以是你想要的)。


編輯: SilentGhost曾建議它可能會更便宜,爲發動機與量詞處理,在這種情況下,你可以簡單地使用:

re.compile(r"[^a-zA-Z0-9-]+") 

+只會造成任何運行連續匹配的字符全部匹配(並被替換)。

+2

+1你是對的,打消了我的答案,你的覆蓋,我認爲他想要什麼......多項匹配任何字符不,字母或連字符。 – birryree 2010-11-05 17:57:27

+0

量詞會使這個便宜。 – SilentGhost 2010-11-05 18:05:05

+0

完美。謝謝! – ash 2010-11-05 18:08:35

4

\w匹配字母數字,在加連字符,然後否定整套:r"[^\w-]"

+0

我假設下劃線被認爲是非字母數字;) – SilentGhost 2010-11-05 17:59:27

+0

這不會匹配/替換OP當前正則表達式所用的下劃線字符。 – eldarerathis 2010-11-05 18:00:19

相關問題