有一个非常奇怪的问题。我的(Python)的正则表达式如下:RegEx/Python:未找到可选空白
u'^.*(?:Grundfl|gfl|wfl|wohnfl|whg|wohnung).*(\s\d{1,3}[.,]?\d{1,2}?)\s*(?:m\u00B2|qm)'
在re.findall() - 来看,这应该抛出两场比赛中的以下文字:“......从71m²至83m²” 然而,只有83匹配。这个问题与数字(\ s \ d {1,3} [。,]?\ d {1,2}?)和平方米(?:m \ u00B2 | qm)之间的可选空白有关。因为当我删除\ s *时,只有71个符合预期。我不知道我的正则表达式有什么问题。 感谢您的帮助!
的问题是有些含糊:你想要得到的第一个数字?然后尝试['^。*(?: Grundfl | gfl | wfl | wohnfl | whg | wohnung)。*?\ s(\ d {1,3} [。,]?\ d {1,2}?)\ S *(?:米\ u00B2 | QM)'](https://regex101.com/r/iU2iV0/1)。你不会得到两个匹配,因为这个模式被锚定在一个字符串的开头,并且用^ ^。所以,也可以尝试['^。*?(?: Grundfl | gfl | wfl | wohnfl | whg | wohnung)。*?\ s(\ d {1,3} [。,]?\ d {1,2} ?)\ S *(??:米\ u00B2 | QM)(:\ S +到\ S +(\ d {1,3} \ d {1,2} [。]?)\ S *(? :米\ u00B2 | QM))'](https://regex101.com/r/iU2iV0/3)?。或者只是一个简单的['(\ d {1,3} [。,]?\ d {1,2}?)\ s *(?:m \ u00B2 | qm)'](https://regex101.com/r/iU2iV0/4) –
我无法重现这一点 - 删除'\ s *'不会改变匹配:https://regex101.com/r/mO1rH2/1 - 但除此之外,'\ d {1,2}?'并不意味着“匹配1或2位数字,可选” - 如果有的话,您需要'\ d {0,2}'。 –
不能简化它:['(\ d {1,2})\ D +(\ d {1,2})'](https://regex101.com/r/mO1rH2/2)? – Jan