我在 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])
- 负前瞻确保没有可选的/
紧接着当前位置右侧的数字。
关于接受正则表达式组的前瞻部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53628568/