首页 > 解决方案 > Python:从字符串中提取带点和逗号的数字

问题描述

我正在用 Python 解析一个包含单词和数字的文件。我只对数字感兴趣,即只有字符 0 到 9、点 (.) 和逗号 (,)。我对保留点和逗号很感兴趣,因为有些文件是用美式数字编写的,即 3.14159,而另一些文件是欧洲(德国)风格,即 3,14159。

我想要一个简单的解决方案,即没有任何 for 循环,没有生成器、产量或复杂的函数。使用正则表达式 (re) 库是完全可以的,但如果你能解释 re.func() 是做什么的,这样我们就可以了解如何在以后需要时以不同的方式调用它。

我的输入是一串混合的数字和字符。两个连续的数字总是由一个或多个小数字符以外的字符分隔。所需的输出应该是一个字符串列表,即每个提取的数字对应一个字符串。以下是一个示例,其中有三个数字要分开,即 3.14、3,14 和 85.2

示例输入:

This Is3.14ATes t3,14 85.2

期望的输出:

['3.14', '3,14', '85.2']

如果这里已经有其他帖子解决了完全相同的问题,我深表歉意。虽然我在这里搜索了很多类似的问题,但我能找到的最接近的是: Regular expression numbers with dots and commas,但是,由于输入的格式和所需的输出,它并没有真正解决我的问题。在此先感谢您的帮助。

标签: pythonregexpython-3.xparsingdata-science

解决方案


您可以使用如下的正则表达式:

input_string = 'This Is3.14ATes t3,14 85.2'

match = re.findall("([0-9]+[,.]+[0-9]+)", input_string)

这将找到以下格式的任何内容:

(number)(, or .)(number)

推荐阅读