接受组的正则表达式前瞻部分

Regex lookahead part of group accepted

我在 powershell 5.1 中使用正则表达式。

我需要它来检测数字组,但忽略后面或前面有 / 的组,因此它应该只检测到 9876。

[regex]::matches('9876 1234/56',‘(?<!/)([0-9]{1,}(?!(\/[0-9])))’).value

现在,结果是:

9876

123

6

更多示例:“13 17 10/20”应该只匹配 13 和 17。

尝试使用类似 (?!(\/([0-9]{1,}))) 的方法,但没有帮助。

您可以使用

\b(?<!/)[0-9]+\b(?!/[0-9])

regex demo

或者,如果数字可以粘在文本上:

(?<![/0-9])[0-9]+(?!/?[0-9])

this regex demo

第一个模式基于单词边界 \b,确保在预期匹配前后没有字母、数字和 _。第二个只是确保匹配的两端没有数字和 /

详情

  • (?<![/0-9]) - 否定后视确保没有数字或 / 紧邻当前位置
  • 的左侧
  • [0-9]+ - 一个或多个数字
  • (?!/?[0-9]) - 否定前瞻,确保没有可选的 / 紧跟当前位置右侧的数字。