正则表达式匹配,如果没有后跟模式

问题描述 投票:3回答:2

我需要匹配字符串

RHS numberXnumberXnumber

在这些字符串中:(所有数字都可以包含小数部分)

foo RHS 100x100x10 foo  
foo RHS 100.0x100x10 foo  
foo RHS 100.0x100.0x10.0 foo
foo RHS 100x100.0x100x10 foo  
foo RHS 10.0x100.0x10.0x10.0 foo  

我写过:

RHS \ d +。?\ d?x \ d +。?\ d?x \ d +。?\ d

但这场比赛也是前三个数字:foo RHS 100x100x100x10 foo

我该怎样才能避免这种情况?如果有4个号码,基本上我不想要任何匹配

python regex regex-negation
2个回答
2
投票

提供的示例不正确。大多数匹配第4行,所有匹配第5行。他们是正确的,你需要字边界和负向前瞻,但他们缺少一个关键的部分。

正则表达式匹配点之前和之后的字边界。意思是如果第三个数字有一个小数,搜索将不会运行到行的末尾,将不会看到最终的x,但将匹配该字符串。

作为一种解决方案,您需要使用这个负向前瞻,检查x:(?!\.?\d?x)的小数点后面

以及在单词边界中包装搜索:\b...\b

我测试了下面的字符串,它的工作原理。

\bRHS \d+\.?\d?x\d+\.?\d?x\d+\.?\d?(?!\.?\d?x)\b

示例:https://regex101.com/r/0nzHkN/2/


0
投票

请改用此正则表达式:

RHS \d+.?\d?x\d+.?\d?x\d+.?\d?(?!x)

或者它的紧凑版本:

RHS (\d+.?\d?){3}(?!x)
© www.soinside.com 2019 - 2024. All rights reserved.