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

时间:2013-12-07 19:43:46

标签: regex vba excel-vba excel

我正在尝试将我当前的正则表达式修改为更独特。

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

RE.Pattern = "(L\d{1}-\w{2}-\w{4,7}-DATA-\d{3,4})"

这样做是从一堆垃圾数据中提取以下字符串示例。仅供参考这些字符串 NOT 静态,数值等会在单元格之间发生变化。

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,TESTING和WORKING?所以我可以抓住它们而不是WRONGON和RUBBISH。

2 个答案:

答案 0 :(得分:1)

我不确定我理解你的问题,因为你说字符串会改变,但你想知道你是否可以静态匹配特定情况。

如果您只想匹配TESTTESTINGWORKING,则可以将\w{4,7}替换为(?:TEST|TESTING|WORKING),但显然不匹配{{1} }或WRONGON。如果你想匹配任何4-7个字符的单词,除了后两个,这是另一回事。

答案 1 :(得分:1)

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

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

请参阅Live demo