正则表达式需求:匹配Landgang后m2前的目标数字
解决正则匹配问题
原正则(?<=landgang\s)(\d+)(?=\s*m2)失效的核心原因:它要求目标数字必须紧跟landgang,且数字与m2之间只能有空白字符,但你的示例文本中landgang和m2之间还有metros tetro dento 12等非空白内容,导致匹配逻辑不成立。
针对需求的正则方案
根据你「匹配landgang之后、m2之前的数字(含2/2这类带斜杠的格式)」的需求,推荐以下正则:
(?<=landgang).*?(\d+(?:\/\d+)?).*?(?=m2)
正则逻辑拆解
(?<=landgang):正向回溯断言,限定匹配范围起始于landgang之后.*?:非贪婪匹配任意字符,避免跳过目标数字直接匹配到m2前的最后一个数字(\d+(?:\/\d+)?):捕获组,匹配纯数字或数字/数字格式的内容(如果不需要斜杠,可简化为\d+).*?(?=m2):非贪婪匹配到m2之前的所有内容,确保目标数字处于landgang到m2的区间内
测试验证
用你的示例文本测试:
kolko 12/43 4:34, tetro gamm m2 landgang 2/2 metros tetro dento 12 343m2 psi 23
该正则会准确捕获到2/2,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Fokker
相关产品推荐
相关产品推荐

