正则表达式将整个数字与后视和前视逻辑匹配(无字边界)

Regex match an entire number with lookbehind and look ahead logic(without word boundaries)

我正在尝试根据几个条件检测字符串是否有数字。例如,如果数字被括号括起来,我不想匹配它,并且我正在使用前瞻和后视来执行此操作,但是当数字包含多个数字时,我 运行 遇到了问题。此外,数字可以位于没有任何 space 分隔符的文本之间。

我的正则表达式:

(?https://regex101.com/r/RnTSMJ/1

示例: {2}:不应匹配。 //我的正则表达式有效

{34:不应该匹配。 //我的正则表达式在 {34

中匹配 4

45}:不应该匹配。 //我的正则表达式在 {45

中匹配 4

{123}:不应匹配。 //我的正则表达式在 {123}

中匹配 2

我查看了 Regex.Match whole words,但这种方法对我不起作用。如果我使用单词边界,上述情况会按预期工作,但像下面这样的情况不会在数字被文本包围的情况下发生。我还想添加一些额外的逻辑,比如不匹配特定字符串,如 1st、2nd 等或#1、#2 等

更新的正则表达式:

(?<!\[|\{|\(|#)(\b\d+\b)(?!\]|\}|\|st|nd|rd|th)

看这里https://regex101.com/r/DhE3K4/4

123abd //应该匹配 123

abc345 //应该匹配234

ab2123cd // 应该匹配 2123

纯正则表达式是否可行,还是我需要更全面的东西?

您可以匹配 1 个或多个数字,断言左边和右边的内容不是 {} 或右边的数字或任何其他选项

(?<![{\d#])\d+(?![\d}]|st|nd|rd|th)

说明

  • (?<![{\d#]) 负向后视,断言左边的不是 {# 或数字
  • \d+ 匹配 1+ 个数字
  • (?! 否定前瞻,断言右边的不是
    • [\d}]|st|nd|rd|th 匹配数字,} 或任何替代项
  • ) 关闭前瞻

Regex demo

以下正则表达式给出了预期的结果。

(?<![#\d{])\d+(?!\w*(?:}|(?:st|th|rd|nd)\b))

Regex Link