我需要匹配字符串
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 100x100x100 x10 foo
我怎么能避免这种情况? 基本上我不想要任何匹配,如果有4个号码
答案 0 :(得分:2)
提供的示例不正确。大多数匹配第4行,所有匹配第5行。他们是正确的,你需要字边界和负向前瞻,但他们缺少一个关键的部分。
正则表达式匹配点之前和之后的字边界。意思是如果第三个数字有一个小数,搜索将不会运行到行的末尾,将不会看到最终的x,但将匹配该字符串。
作为一种解决方案,您需要使用此负面预测,检查x后的小数:(?!\.?\d?x)
除了将搜索包装在单词边界中:\b...\b
我测试了下面的字符串并且它有效。
\bRHS \d+\.?\d?x\d+\.?\d?x\d+\.?\d?(?!\.?\d?x)\b
答案 1 :(得分:0)
请改用此正则表达式:
RHS \d+.?\d?x\d+.?\d?x\d+.?\d?(?!x)
或者它的紧凑版本:
RHS (\d+.?\d?){3}(?!x)