python,删除一行中的字符,但留下数字和特殊符号

时间:2014-08-12 15:18:04

标签: python regex

我需要删除字符串中的所有字符,但数字和特殊符号除外。例 "asdasd 289(222):310"会产生"289(222):310"。我该怎么做?

3 个答案:

答案 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),但不会在空格之间替换。

当然,时间取决于将要处理的数据类型。