Regex 如果匹配了负的lookback/lookahead,则不匹配正则表达式

Regex 如果匹配了负的lookback/lookahead,则不匹配正则表达式,regex,Regex,我试图根据某些条件匹配一些数字 如果单位为“km/h”,则匹配数字 如果装置为cc或编号前有$符号,则与编号不匹配 我试着使用下面的负向后看和向前看来测试cc的条件。但它在我的测试样本中只省略了一个“0” \d{1,4}(?!cc) 和我的测试样本: 100.2km/h 3000cc, $2/km 我需要匹配100.2,而不应该匹配2和3000..您可以尝试此正则表达式: (?<!\$)(\d+(?:\.\d+)?)(?=km\/h) (? 它检查数字前没有$,数字后必须有一个

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

  • 如果单位为“km/h”,则匹配数字
  • 如果装置为cc或编号前有$符号,则与编号不匹配
我试着使用下面的负向后看和向前看来测试cc的条件。但它在我的测试样本中只省略了一个“0”

\d{1,4}(?!cc)
和我的测试样本:

100.2km/h
3000cc, 
$2/km

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

您可以尝试此正则表达式:

(?<!\$)(\d+(?:\.\d+)?)(?=km\/h)
(?
它检查数字前没有$,数字后必须有一个
km/h
。对于匹配的数字,我考虑使用
(\。\d+)?


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

您可以尝试以下正则表达式:

(?<!\$)(\d+(?:\.\d+)?)(?=km\/h)
(?
它检查数字前没有$,数字后必须有一个
km/h
。对于匹配的数字,我考虑使用
(\。\d+)?


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

使用负向后看和向前看,您可以使用:

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


使用负向后看和向前看,您可以使用:

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


如果您试图编写一个通用正则表达式来查找文本中符合条件的数字,那么向前看和向后看是一种合理的方法。诀窍是要注意,反向向后看必须在
$
和数字上都匹配,否则它只能从nu的第二个数字开始匹配因此,我认为您正在寻找的解决方案是:

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

(?如果您试图编写一个通用正则表达式来查找文本中符合您的条件的数字,那么向前看和向后看是一种合理的方法。诀窍是注意,反向向后看必须在
$
和数字上匹配,否则它将从数字的第二位开始匹配。因此,我认为您正在寻找的解决方案是:

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

(?除了@MacroMan的答案外,您还可以将数字包含在负回溯中以确保只匹配“整数”:

(?


除了@MacroMan给出的答案外,您还可以将数字包含到负回溯中以确保只匹配“整数”:

(?


什么是正则表达式风格?它能支持所有格量词/原子组,lookbehinds吗?请注意,如果只想在有
km/h
时匹配,答案是
\d*\。?\d+(?=\s*km\/h)
。这行得通吗?据我所知,你需要。但是,你的问题很不清楚。什么是正则表达式风格?它能支持所有格量词/原子组吗,lookbehinds?请注意,如果你只想在有
km/h
时匹配,答案是
\d*\。?\d+(?=\s*km\/h)
。这行得通吗?据我所知,你需要。但是,你的问题很不清楚。否决投票的人能解释一下为什么这些答案没有用吗?必须禁止这种没有留下评论的否决投票。+1来弥补这一点。我发现
[\d.]+
有点放任,例如,
将匹配。PS:我不是连续的投票人:)投票被否决的人能解释一下为什么这些答案没有用吗?必须禁止这种没有留下评论的投票被否决。+1来弥补这一点。我发现
[\d.]+
有点放任,例如,
将匹配。PS:我不是串行下选程序:)加上一个以弥补无注释下选程序。但是为了完全完成测试,当我尝试执行(?cc)时在3000cc上,我的样本会选择300而不是什么都不选择,我应该如何解决这个问题?再加上一个以弥补无评论的向下投票。但为了完全完成测试,当我尝试在3000cc上做(?cc)时,我的样本会选择300而不是什么都不选择,我应该如何解决这个问题?