Использование str.translate
, это, вероятно, самый быстрый способ сделать это:
>>> strs = '000,5\r\n'
>>> from string import ascii_letters, punctuation, whitespace
>>> ignore = ascii_letters + punctuation + whitespace
>>> strs.translate(None, ignore)
'0005'
Использование regex
:
>>> import re
>>> re.sub(r'[^\d]+','',strs) #or re.sub(r'[^0-9]+','',strs)
'0005'
Использование str.join
и str.isdigit
:
>>> "".join([x for x in strs if x.isdigit()])
'0005'
Использование int()
, чтобы получить целое число:
>>> int('0005')
5
Зубчатые сравнений:
>>> strs = strs*10**4
>>> %timeit strs.translate(None, ignore)
1000 loops, best of 3: 441 us per loop
>>> %timeit re.sub(r'[^\d]+','',strs)
10 loops, best of 3: 20.3 ms per loop
>>> %timeit re.sub(r'[^0-9]+','',strs)
100 loops, best of 3: 17.1 ms per loop
>>> %timeit "".join([x for x in strs if x.isdigit()])
10 loops, best of 3: 19.2 ms per loop
вы должны быть в состоянии прочитать негативов, шестигранник ('0xFFFFFF') или поплавки (' -592.45821543e + 04' Do)? – AJMansfield
Просто nitpicking, но вы не хотите удалять _non-integers_, но _non-digits_ –