如何从 Python 中的字符串中提取数字?

新手上路,请多包涵

我想提取字符串中包含的所有数字。哪个更适合此目的,正则表达式或 isdigit() 方法?

例子:

 line = "hello 12 hi 89"

结果:

 [12, 89]

原文由 pablouche 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

如果您只想提取正整数,请尝试以下操作:

 >>> txt = "h3110 23 cat 444.4 rabbit 11 2 dog"
>>> [int(s) for s in txt.split() if s.isdigit()]
[23, 11, 2]

我认为这比正则表达式示例更好,因为您不需要另一个模块,而且它更具可读性,因为您不需要解析(和学习) 正则表达式 mini-language

这将无法识别浮点数、负整数或十六进制格式的整数。如果您不能接受这些限制, 下面的 jmnas 答案 将起到作用。

原文由 fmark 发布,翻译遵循 CC BY-SA 4.0 许可协议

我会使用正则表达式:

 >>> import re
>>> re.findall(r'\d+', "hello 42 I'm a 32 string 30")
['42', '32', '30']

这也将匹配来自 bla42bla 的 42。如果您只想要由单词边界(空格、句点、逗号)分隔的数字,则可以使用 \b :

 >>> re.findall(r'\b\d+\b', "he33llo 42 I'm a 32 string 30")
['42', '32', '30']

以数字列表而不是字符串列表结束:

 >>> [int(s) for s in re.findall(r'\b\d+\b', "he33llo 42 I'm a 32 string 30")]
[42, 32, 30]

注意:这不适用于负整数

原文由 Vincent Savard 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题