python: 从字符串中提取数字
如果只想提取正整数,请尝试以下操作:
>>> str ="h3110 23 cat 444.4 rabbit 11 2 dog"
>>> [int(s) for s in str.split() if s.isdigit()]
[23, 11, 2]
我认为这比 正规表达式 示例更好,原因有三个。 首先,你不需要另一个模块;其次,因为你不需要解析 正规表达式 mini-language,所以它更具可读性;第三,它是更快的( 因此可能更多 Pythonic ):
python -m timeit -s"str = 'h3110 23 cat 444.4 rabbit 11 2 dog' * 1000""[s for s in str.split() if s.isdigit()]"
100 loops, best of 3: 2.84 msec per loop
python -m timeit -s"import re""str = 'h3110 23 cat 444.4 rabbit 11 2 dog' * 1000""re.findall('\b\d+\b', str)"
100 loops, best of 3: 5.66 msec per loop
我将使用正则表达式:
>>> import re
>>> re.findall(r'd+', 'hello 42 I'm a 32 string 30')
['42', '32', '30']
这也与 bla42bla
42相匹配。 如果只需要用单词边界( 空格,句号,逗号) 分隔的数字,你可以使用 b:
>>> re.findall(r'bd+b', 'he33llo 42 I'm a 32 string 30')
['42', '32', '30']
delnan有一个好的点( 查看评论): 你可以通过列表映射 int()
,将字符串转换为整数。