2012-06-08 72 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

相关问题