从字符串中删除数字

Can*_* Lu 16 python regex string

我们有一大堆例如字符串:c1309,IF1306,v1309,p1209,a1309,mo1309.
在Python中,删除数字的最佳方法是什么?所有我需要的是:c,IF,v,p,a,mo从上面的例子.

Ash*_*ary 27

你可以使用regex:

>>> import re
>>> strs = "c1309, IF1306, v1309, p1209, a1309, mo1309"
>>> re.sub(r'\d','',strs)
'c, IF, v, p, a, mo'
Run Code Online (Sandbox Code Playgroud)

或更快的版本:

>>> re.sub(r'\d+','',strs)
'c, IF, v, p, a, mo'
Run Code Online (Sandbox Code Playgroud)

timeit 比较:

>>> strs = "c1309, IF1306, v1309, p1209, a1309, mo1309"*10**5

>>> %timeit re.sub(r'\d','',strs)
1 loops, best of 3: 1.23 s per loop

>>> %timeit re.sub(r'\d+','',strs)
1 loops, best of 3: 480 ms per loop

>>> %timeit ''.join([c for c in strs if not c.isdigit()])
1 loops, best of 3: 1.07 s per loop

#winner
>>> %timeit from string import digits;strs.translate(None, digits)
10 loops, best of 3: 20.4 ms per loop
Run Code Online (Sandbox Code Playgroud)


jam*_*lak 21

>>> text = 'mo1309'
>>> ''.join([c for c in text if not c.isdigit()])
'mo'
Run Code Online (Sandbox Code Playgroud)

这比正则表达式更快

python -m timeit -s "import re; text = 'mo1309'" "re.sub(r'\d','',text)"
100000 loops, best of 3: 3.99 usec per loop
python -m timeit -s "import re; text = 'mo1309'" "''.join([c for c in text if not c.isdigit()])"
1000000 loops, best of 3: 1.42 usec per loop
python -m timeit -s "from string import digits; text = 'mo1309'" "text.translate(None, digits)"
1000000 loops, best of 3: 0.42 usec per loop
Run Code Online (Sandbox Code Playgroud)

str.translate正如@DavidSousa所建议的那样:

from string import digits
text.translate(None, digits)
Run Code Online (Sandbox Code Playgroud)

剥离字符总是最快的.

itertools提供了一个鲜为人知的函数ifilterfalse

>>> from itertools import ifilterfalse
>>> ''.join(ifilterfalse(str.isdigit, text))
'mo'
Run Code Online (Sandbox Code Playgroud)


Dav*_*usa 13

我认为字符串方法translate比加入列表等更优雅.

from string import digits # digits = '0123456789'
list1 = ['c1309', 'IF1306', 'v1309', 'p1209', 'a1309', 'mo1309']
list2 = [ i.translate(None, digits) for i in list1 ]
Run Code Online (Sandbox Code Playgroud)

  • `from string import digits`更好(不确定为什么你改了它).这是最快的方式,在Python 2中可能更优雅,但在Python 3中它看起来像:`text.translate(str.maketrans('','',digits))` (2认同)