正则表达式匹配一个不是的数字

Regex match a number the is not

我正在尝试对自定义文件格式进行语法分析。 我只想突出显示数字,但数字可以采用多种格式。尽管数字不应该出现在变量名或某种单词中。

为简单起见,假设我正在寻找任意数量的这种类型 [0-9][\.0-9]* 我希望只保留数字而不是填充。然而,唯一的问题是这比我想要的要多。 这些是我正在寻找的一些失败案例 避免 variable123 or variable_123name or _123_, 其中一些可接受的情况是 |123| or +123+ 3 123% ext... 11 2123 123% 0.12 1.1.3.4.4 12 1 23452 23423| ext...

我基本上只是想摆脱不必要的变量突出显示,同时在更轻松的情况下保持数字突出显示,这些数字可以在列表中,周围有许多其他随机字符。我已经尝试使用来自该站点的几个示例进行前瞻,但没有提出好的解决方案。我有一些失败标准,我希望突出显示标准宽松。有很多数字,但唯一需要摆脱的重要情况是数字被嵌入到 id 标签中,通常像变量 decleration。这意味着字符串中不应包含字母 [a-zA-Z] 以及下划线 [_a-zA-Z] 并尝试使用此模式通过查找消除这些情况。虽然这并没有解决我的问题。 Here is a link to my problem (regex101.com).

更新

重新看了你的问题后,应该可以这样解决
https://regex101.com/r/K6fQXy/1

(?<!\w)\d[.\d]*(?!\w)

格式化

 (?<! \w )
 \d [.\d]* 
 (?! \w )

或者,如果您不想匹配数字后的尾随点,这个
https://regex101.com/r/K6fQXy/2

(?<!\w)\d(?:\.?\d)*(?!\w)


只需滚动您自己的正则表达式即可。
使用断言来限定要突出显示的数字。

https://regex101.com/r/XwDEkj/1

(?<=\|)\d+(?=\|)|(?<=\+)\d+(?=\+)|(?<=$)\d+|\d+(?=%)

格式化

     (?<= \| )
     \d+ 
     (?= \| )
  |  
     (?<= \+ )
     \d+ 
     (?= \+ )
  |  
     (?<= $ )
     \d+ 
  |  
     \d+ 
     (?= % )

如果可用,请使用单词边框匹配

\<[0-9][\.0-9]*\>