alp*_*ric 2 python string for-loop if-statement strip
清除用户输入的字符串的简单方法是什么?这是我在清理混乱时依赖的代码.如果有一个更简单的智能版本可用,那就太好了.
invalid = ['#','@','$','$','%','^','&','*','(',')','-','+','!',' ']
for c in invalid:
if len(line)>0: line=line.replace(c,'')
Run Code Online (Sandbox Code Playgroud)
PS我如何将这个(使用嵌套if)函数放在一行上?
import re
re.sub('[#@$%^&*()-+!]', '', line)
Run Code Online (Sandbox Code Playgroud)
re是正则表达式模块.使用方括号意味着"匹配括号内的任何一个东西".所以调用说," line在括号内找到任何东西,并用任何东西替换它('').
最快的方法是使用str.translate:
>>> invalid = ['#','@','$','$','%','^','&','*','(',')','-','+','!',' ']
>>> s = '@#$%^&*fdsfs#$%^&*FGHGJ'
>>> s.translate(None, ''.join(invalid))
'fdsfsFGHGJ'
Run Code Online (Sandbox Code Playgroud)
时间比较:
>>> s = '@#$%^&*fdsfs#$%^&*FGHGJ'*100
>>> %timeit re.sub('[#@$%^&*()-+!]', '', s)
1000 loops, best of 3: 766 µs per loop
>>> %timeit re.sub('[#@$%^&*()-+!]+', '', s)
1000 loops, best of 3: 215 µs per loop
>>> %timeit "".join(c for c in s if c not in invalid)
100 loops, best of 3: 1.29 ms per loop
>>> %timeit re.sub(invalid_re, '', s)
1000 loops, best of 3: 718 µs per loop
>>> %timeit s.translate(None, ''.join(invalid)) #Winner
10000 loops, best of 3: 17 µs per loop
Run Code Online (Sandbox Code Playgroud)
在Python3上你需要做这样的事情:
>>> trans_tab = {ord(x):None for x in invalid}
>>> s.translate(trans_tab)
'fdsfsFGHGJ'
Run Code Online (Sandbox Code Playgroud)