2013-12-07 48 views
0

我想修改我当前的正则表达式,使其更加排他。使用正则表达式来提取所需的数据

这是我到目前为止有:

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 

这不是我所需要的,并想知道什么,如果有的话,可以做,以修改我的正则表达式,以阻止这种情况发生...

我想知道是否有可能在原始正则表达式中以某种方式静态定义说测试,测试和工作?所以我可以抓住他们,而不是WRONGON和垃圾。

+0

我编辑了自己的冠军。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –

回答

1

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

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

Live demo

+0

非常感谢! – Chris

1

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

如果你只是想匹配TESTTESTINGWORKING,可以替换\w{4,7}(?:TEST|TESTING|WORKING),它显然不会匹配WRONGONRUBBISH。如果你想匹配任何4-7个字符的字,除了后面两个,这是一个不同的问题。