对十进制数使用 re.findAll

问题描述

我确实使用 re.findAll 从这样的字符串中提取十进制数:

size = "Koko33,5 m²"

numbers = re.findall("\d+\,*\d+",size)

print(numbers) = ['33,5']

然后我试图从 ['33,5'] 中只得到数字 33,5。

我猜我是这样做的:

numbers = re.findall("\d+\,size)[0]

它奏效了。但我不明白它为什么有效?

我是编程新手,所以每个帮助都很好:)

解决方法

之所以有效,是因为它找到了 是数字,然后是逗号,然后是另一个数字的模式。

\d 得到一个数字,+ 得到前面的表达式(\d) 得到所有连续的相同字母,然后\, 只找到逗号,然后{{ 1}} 在零次和无限次之间匹配,然后还有另一个 *

最后一件事,切片部分 (\d+),获取第一个匹配的模式(在本例中只有一个)。

More explanation

,

你猜对了。

\d+  Find 1 or more numbers (1,2,3...),*   Find 0,1 or more commas
\d+  Find 1 or more numbers (1,3...)

模式应该找到 33,5 或 999,123。任何“数字逗号数字”模式。

我发现的关于 Regex 的最佳来源是 Jeffrey E. F. Friedl 的“掌握正则表达式”。