regex - 如何捕获两个字母?

标签 regex vba

我有正则表达式 [^&]_*\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/

最佳答案

在您的模式 [^&]_*\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

关于regex - 如何捕获两个字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56959777/

相关文章:

javascript - 正则表达式匹配除第一次出现以外的所有内容

excel - 将值粘贴到用户选择的单元格范围,有时单元格之间为空白

vba - *.xlam 加载项和打开加载项的新 VBA 项目/新 Excel 实例中缺少引用

regex - 括号中的strsplit

python re.sub 和 re.search 无法按预期工作

c++ - 如何在 VBA/Excel 中创建一个字符串数组并将其发送到 C++ DLL 以便它可以在 DLL 中迭代

excel - 检查BuiltInDocumentProperty是否已设置且没有错误捕获

vba - 过滤列表的算法

css - 解释查找 CSS 注释的正则表达式

java - 按 Java 中第一个找到的字符串拆分