1

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

size = "Koko33,5 m²"

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

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

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

我猜我是这样做的:

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

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

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

4

2 回答 2

2

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

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

最后一件事,切片部分 ( [0]),获得第一个匹配的模式(在这种情况下只有一个)。

更多解释

于 2020-12-20T10:23:03.487 回答
1

你猜的不错。

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

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

我发现的关于 Regex 的最佳来源是 Jeffrey EF Friedl 的“Mastering Regular Expressions”。

于 2020-12-20T10:32:48.580 回答