RegEx/Python:找不到可选空白

2024-06-10 09:10:36 发布

您现在位置:Python中文网/ 问答频道 /正文

有个很奇怪的问题。我的(Python)RegEx如下所示:

u'^.*(?:Grundfl|gfl|wfl|wohnfl|whg|wohnung).*(\s\d{1,3}[.,]?\d{1,2}?)\s*(?:m\u00B2|qm)'

在一个关于芬德尔()—term,这应该为以下文本抛出两个匹配项:“…从71m²到83m²” 然而,只有83个匹配。这个问题与数字(\s\d{1,3}[,])之间的可选空白有关?\d{1,2}?)平方米(?)?:m\u00B2 | qm),因为当我删除\s*时,只有71与预期匹配。我不知道我的正则表达式出了什么问题。 谢谢你的帮助!在


Tags: 文本数字空白regextermqmwflgfl
2条回答

你为什么不试着用积极的眼光看问题呢?只要后面有qm,这将匹配1+个数字(内有可选逗号)。数字和单位之间有一个可选的空格:

>>> import re
>>> re.findall("[\d|\,]{1,}(?=\s{0,4}[m\u00B2|qm])", "from 71m² to 83m²")
['71', '83']
>>> re.findall("[\d|\,]{1,}(?=\s{0,4}[m\u00B2|qm])", "from 71,56 m² to 837,78 qm")
['71,56', '837,78']
>>>

它不考虑您指定的单词,但您可以很容易地将该部分添加回。然而关于芬德尔()返回非重叠的结果,因此,如果在搜索中指定字符串的开头,它将只返回第一个值,因为它有效地“切掉”了匹配的部分,因此永远找不到第二个部分。在

可以将以下正则表达式与re.findall一起使用:

(\d*[.,]?\d+)\s*(?:m\u00B2|qm)

参见regex demore.findall将只返回组1捕获值的列表。在

图案细节:

  • (\d*[.,]?\d+)-包含整数或浮点数的第1组:0+位数,后跟1或0.,,后跟1+个数字
  • \s*-0+个空格
  • (?:m\u00B2|qm)-要么要么qm

参见Python demo

^{pr2}$

相关问题 更多 >