我有正则表达式 [^&]_*\s*(SF)*\d{8}
我正在尝试将 8 位数字与单词 SF 或 SF_ 匹配
例子
_zz&69050398_5d147597dd4aca00014351d9_zz sf 76064603RPL_Import_Create
_ac&68728692_5d18fa52dd4aca00014356dd_SF 76113839 副本
SF 中的 S 没有突出显示,第三个“_”之前的 8 位数字也突出显示。我需要避免这种情况。
你可以在这里看到 https://regex101.com/r/P0P238/1/
最佳答案
在您的模式 [^&]_*\s*(SF)*\d{8}
中,您匹配的不是 & 符号 [^&]
, 0 + 次 _
,0+ 次空白字符并在 0+ 次重复组匹配 SF 中捕获。然后模式以匹配的 8 位数字结束。
这意味着有很多“可选”部分可以匹配 0+ 次。
你得到你的匹配是因为 [^&]
可以匹配 F
,那么 _*\s*(SF)*
是可选但\s*
可以匹配空格,然后可以匹配8位数字。
您可以通过从组中删除量词并在字符类 [\s_]
中匹配 \s
和 _
来更新您的模式
[^&][\s_](SF) \d{8}
如果您只想匹配以 SF 和空格为前缀的 8 位数字,您可以使用不区分大小写的匹配并使用:
(sf) \d{8}
关于regex - 如何捕获两个字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56959777/