我想除去字符串(python)中的連字符以外的所有非字母數字字符。 如何更改此正則表達式以匹配除連字符以外的任何非字母數字字符?如何從正則表達式組中排除一個字符?
re.compile('[\W_]')
謝謝。
我想除去字符串(python)中的連字符以外的所有非字母數字字符。 如何更改此正則表達式以匹配除連字符以外的任何非字母數字字符?如何從正則表達式組中排除一個字符?
re.compile('[\W_]')
謝謝。
你可以只用一個否定的字符類,而不是:
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-]+")
的+
只會造成任何運行連續匹配的字符全部匹配(並被替換)。
\w
匹配字母數字,在加連字符,然後否定整套:r"[^\w-]"
我假設下劃線被認爲是非字母數字;) – SilentGhost 2010-11-05 17:59:27
這不會匹配/替換OP當前正則表達式所用的下劃線字符。 – eldarerathis 2010-11-05 18:00:19
+1你是對的,打消了我的答案,你的覆蓋,我認爲他想要什麼......多項匹配任何字符不,字母或連字符。 – birryree 2010-11-05 17:57:27
量詞會使這個便宜。 – SilentGhost 2010-11-05 18:05:05
完美。謝謝! – ash 2010-11-05 18:08:35