Regex 使用正则表达式提取所需数据

Regex 使用正则表达式提取所需数据,regex,vba,excel,Regex,Vba,Excel,我正试图修改我当前的正则表达式,使其更具排他性 这就是我到目前为止所做的: RE.Pattern = "(L\d{1}-\w{2}-\w{4,7}-DATA-\d{3,4})" 这样做的目的是从一堆垃圾数据中提取以下字符串示例。仅供参考,这些字符串不是静态的,数值等将在单元格之间更改 L2-R2-TEST-DATA-4724 L1-SR-TESTING-DATA-472 L1-R2-WORKING-DATA-472 上面的字符串是我想要的,但是,除此之外,它还将提取以下数据: L1-R2-W

我正试图修改我当前的正则表达式,使其更具排他性

这就是我到目前为止所做的:

RE.Pattern = "(L\d{1}-\w{2}-\w{4,7}-DATA-\d{3,4})"
这样做的目的是从一堆垃圾数据中提取以下字符串示例。仅供参考,这些字符串不是静态的,数值等将在单元格之间更改

L2-R2-TEST-DATA-4724
L1-SR-TESTING-DATA-472
L1-R2-WORKING-DATA-472
上面的字符串是我想要的,但是,除此之外,它还将提取以下数据:

L1-R2-WRONGON-DATA-4725
L2-SR-RUBBISH-DATA-472
这不是我需要的,我想知道如果有什么可以做的话,为了修改我的正则表达式来阻止这种情况发生


我想知道是否有可能在原始正则表达式中静态地定义TEST、TEST和WORKING?这样我就可以抓住它们,而不是错误和垃圾。

我不确定我是否理解您的问题,因为您说字符串将发生变化,但您想知道是否可以静态匹配特定的情况


如果您只想匹配
测试
测试
工作
,您可以将
\w{4,7}
替换为
(?:TEST | TESTING | WORKING)
,它显然不会匹配
错误
垃圾
。如果您想匹配除后两个字符以外的任何4-7个字符的单词,那是另一回事。

您可以使用非捕获组
(?:
来分隔要包含的单词。此外,不必使用
L\d{1}
,您只需使用
L\d

RE.Pattern = "(L\d-\w{2}-(?:TEST(?:ING)?|WORKING)-DATA-\d{3,4})"

请参见

我已编辑了您的标题。请参见“”,其中的共识是“不,他们不应该”。