正则表达式我想捕获两个字母“ SF”,而仅捕获“ F”

时间:2019-07-09 20:00:33

标签: regex vba

StackOverflow上的你好朋友

我有以下[^&] _ \ s (SF)* \ d {8}正则表达式

我正在尝试将8位数字与SF或SF_匹配

例如下面的示例

1)_zz&69050398_5d147597dd4aca00014351d9_zz SF 76064603RPL_Import_Create

2)_ac&68728692_5d18fa52dd4aca00014356dd_SF 76113839的副本

我测试时,SF的S没有突出显示。和第三个“ _”之前的8位数字也将突出显示。我需要避免这种情况。

您可以在这里看到它 https://regex101.com/r/P0P238/1/

如何匹配整个“ SF”?

[^&]_*\s*(SF)*\d{8}

1 个答案:

答案 0 :(得分:2)

在模式[^&]_*\s*(SF)*\d{8}中,您不匹配与号[^&],而不是0+倍_,0+倍空白字符,并以0+倍的重复组匹配SF捕获。然后,模式以匹配的8位数字结束。

这意味着有很多“可选”零件可以匹配0次以上。

因为[^&]可以匹配F,所以_*\s*(SF)*是可选的,但是\s*可以匹配空格,然后可以匹配8位数字

您可以通过从组中删除量词来更新样式,并在字符类\s中匹配_[\s_]

[^&][\s_](SF) \d{8}

Regex demo

如果您只想匹配SF前面的8位数字和一个空格,则可以使用不区分大小写的匹配并使用:

(sf) \d{8}

Regex demo