python,从一行中删除字符,但留下数字和特殊符号
我需要删除字符串中的所有字符,除了数字和特殊符号。考试python,从一行中删除字符,但留下数字和特殊符号,python,regex,Python,Regex,我需要删除字符串中的所有字符,除了数字和特殊符号。考试 asdasd 289222:310应生成289222:310。如何执行此操作?您可以检查每个字符是否为字母字符 >>> s = "asdasd 289(222):310" >>> "".join(i for i in s if not i.isalpha()) ' 289(222):310' 如果要删除前导和尾随空格,请在.strip上加上大头钉 string类有isalpha和isdigit方法,它们
asdasd 289222:310应生成289222:310。如何执行此操作?您可以检查每个字符是否为字母字符
>>> s = "asdasd 289(222):310"
>>> "".join(i for i in s if not i.isalpha())
' 289(222):310'
如果要删除前导和尾随空格,请在.strip上加上大头钉
string类有isalpha和isdigit方法,它们对类似的事情很有用
>>> '2'.isdigit()
True
>>> '2'.isalpha()
False
>>> 'a'.isdigit()
False
>>> 'a'.isalpha()
True
你可以删除这些字母
>>> import re
>>> s = "asdasd 289(222):310"
>>> m = re.sub(r'[A-Za-z]+', r'', s)
>>> m
' 289(222):310'
如果还想删除空格,请尝试以下代码
>>> m = re.sub(r'[A-Za-z ]+', r'', s)
>>> m
'289(222):310'
如果出于任何原因,速度至关重要,那么以下代码可能会有所帮助:
from string import maketrans
trans1 = maketrans("abcdefghijklmnopqrstuvwxyzABCDEFGHOJKLMNOPQRSTUVWXYZ", " "*52)
s = "asdasd 289(222):310"
m = s.translate(trans1).replace(" ", "")
在Windows 8.1 64位Python 2.7.8 64位机器上,使用ipython的%timeit show me 1.2 usec进行计时,使用Avinash Raj发布的正则表达式进行计时,使用Cyber的方法进行计时
使用.strip代替.replace速度更快~900 ns,但不会在空格之间进行替换
当然,计时确实取决于要处理的数据类型
from string import maketrans
trans1 = maketrans("abcdefghijklmnopqrstuvwxyzABCDEFGHOJKLMNOPQRSTUVWXYZ", " "*52)
s = "asdasd 289(222):310"
m = s.translate(trans1).replace(" ", "")