我需要删除字符串中的所有字符,但数字和特殊符号除外。例
"asdasd 289(222):310"
会产生"289(222):310"
。我该怎么做?
答案 0 :(得分:2)
你可以删除这些字母,
>>> 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'
答案 1 :(得分:0)
您可以检查每个字符以查看它是否是字母字符。
>>> s = "asdasd 289(222):310"
>>> "".join(i for i in s if not i.isalpha())
' 289(222):310'
如果您要删除前导和尾随空格,请点击.strip()
>>> "".join(i for i in s if not i.isalpha()).strip()
'289(222):310'
string
类包含方法isalpha()
和isdigit()
,对于这类内容非常有用。
>>> '2'.isdigit()
True
>>> '2'.isalpha()
False
>>> 'a'.isdigit()
False
>>> 'a'.isalpha()
True
答案 2 :(得分:0)
如果由于某种原因,速度至关重要,以下代码可能有所帮助:
from string import maketrans
trans1 = maketrans("abcdefghijklmnopqrstuvwxyzABCDEFGHOJKLMNOPQRSTUVWXYZ", " "*52)
s = "asdasd 289(222):310"
m = s.translate(trans1).replace(" ", "")
使用ipython的%timeit的时间显示我使用1.2 usec用于此方法,3.3 usec用于Avinash Raj发布的正则表达式,8秒用于Cyber方法(在Windows 8.1 64位Python 2.7.8 64位计算机上)。
使用.splace的.strip更快(~900 ns),但不会在空格之间替换。
当然,时间取决于将要处理的数据类型。