2012-06-08 66 views

回答

24

如果你想測試一個正則表達式的字符串,使用re

import re 
valid = re.match('^[\w-]+$', str) is not None 
5

Python有正則表達式,以及:

import re 
if re.match('^[\w-]+$', s): 
    ... 

或者你可以創建一個列表的允許字符:

from string import ascii_letters 
if all(c in ascii_letters+'-' for c in s): 
    ... 
+0

re.match('^ [\ w - ] + $',s)返回相應的MatchObject實例。如果字符串與模式不匹配,則返回無。應該與無比較。 – Temak

+1

@Enor爲什麼?任何匹配對象都是真實的,沒有是唯一可能的虛假價值。 –

1

要測試字符串包含字母,數字和破折號,我會用

import re 
found_s = re.findall('^[\w-]+$', s) 
valid = bool(found_s) and found_s[0] == s 
+0

哎呀,從來沒有,所以不必要 – richard

1

沒有導入任何模塊只使用純Python,刪除任何沒有字母,數字,除了破折號。

string = '#Remove-*crap?-from-this-STRING-123$%' 

filter_char = lambda char: char.isalnum() or char == '-' 
filter(filter_char, string) 

# This returns--> 'Remove-crap-from-this-STRING-123' 

或者在一行:

''.join([c for c in string if c.isalnum() or c in ['-']]) 
+0

這應該是被接受的答案,你不需要正則表達式或外部包來解決這個問題。 – Roganartu

相關問題