问题描述
我确实使用 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+
),获取第一个匹配的模式(在本例中只有一个)。
你猜对了。
\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 的“掌握正则表达式”。