如果匹配负向lookbehind / lookahead,则不匹配正则表达式

时间:2015-11-30 12:22:22

标签: regex

我试图根据某些条件匹配某些数字。

  • 如果单位为' km / h'
  • ,请匹配数字
  • 如果单位为cc或数字前面有$符号
  • ,则不匹配数字

我试图使用负面的lookbehind和lookahead如下面来测试cc的条件。但它只省略了一个" 0"在我的测试样本中。

\d{1,4}(?!cc)

和我的测试样本:

100.2km/h
3000cc, 
$2/km

我需要匹配100.2,并且不应该匹配2和3000 ..

4 个答案:

答案 0 :(得分:2)

使用负面的lookbehind和lookahead你可以使用:

(?<!\$)([\d.]+)(?=km\/h)

Regular expression visualization

Debuggex Demo

答案 1 :(得分:1)

你可以试试这个正则表达式:

(?<!\$)(\d+(?:\.\d+)?)(?=km\/h)

检查号码前是否有$ $,并且号码后面必须有km/h。对于数字匹配,我正在考虑使用(\.\d+)?

的小数点后的数字

您也可以使用锚点^$来匹配整个字符串(如果需要)。

答案 2 :(得分:1)

除了@MacroMan的答案之外,您还可以将数字包含在负面背后隐藏中,以确保仅匹配&#34;整体&#34;数:

(?<![\$\d])(\d+\.?\d+)(?=km\/h)

Regular expression visualization

Try it on Debuggex

答案 3 :(得分:0)

如果您正在尝试编写一般正则表达式来查找符合条件的文本中的数字,那么前瞻和后瞻是一种合理的方法。诀窍是要注意负面的后视必须匹配$和数字,否则它只会从数字的第二个数字开始匹配。所以我认为您正在寻找的解决方案是:

(?<![$.]|\d)([\d.]+)(?=km\/h)