Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python,从一行中删除字符,但留下数字和特殊符号_Python_Regex - Fatal编程技术网

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(" ", "")