接受组的正则表达式前瞻部分
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])
或者,如果数字可以粘在文本上:
(?<![/0-9])[0-9]+(?!/?[0-9])
第一个模式基于单词边界 \b
,确保在预期匹配前后没有字母、数字和 _
。第二个只是确保匹配的两端没有数字和 /
。
详情
(?<![/0-9])
- 否定后视确保没有数字或 /
紧邻当前位置 的左侧
[0-9]+
- 一个或多个数字
(?!/?[0-9])
- 否定前瞻,确保没有可选的 /
紧跟当前位置右侧的数字。
我在 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])
或者,如果数字可以粘在文本上:
(?<![/0-9])[0-9]+(?!/?[0-9])
第一个模式基于单词边界 \b
,确保在预期匹配前后没有字母、数字和 _
。第二个只是确保匹配的两端没有数字和 /
。
详情
(?<![/0-9])
- 否定后视确保没有数字或/
紧邻当前位置 的左侧
[0-9]+
- 一个或多个数字(?!/?[0-9])
- 否定前瞻,确保没有可选的/
紧跟当前位置右侧的数字。