正则表达式匹配不包含子字符串的字符串

时间:2014-08-22 13:31:18

标签: regex

我有一个逗号分隔列表,如下所示。该列表实际上在一行,但我已将其拆分以演示语法,并且每个单元包含5个元素。列表末尾没有逗号

ro:2581,1309531682152,A,Place,Page,
me:2642,1310989368864,A,Place,Page,
uk:2556,1309267095061,A,Place,Page,
me:2642,1310989380238,D,Place,Page,
me:2642,1334659643627,D,Place,Page,
ro:3562,1378721526696,A,Place,Page,
uk:1319,1309337246675,D,Place,Page,
ro:2581,1379500694666,D,Place,Page,
uk:1319,1309337246675,A,Place,Page

我要做的是删除任何不以uk开头的单位(实线):即,结果将是:

uk:2556,1309267095061,A,Place,Page,
uk:1319,1309337246675,D,Place,Page,
uk:1319,1309337246675,A,Place,Page

如果字符串在单独的行上作为我的例子,我可以相对容易地做到这一点,但因为它全部在一行,我无法让它工作。有人能指出我正确的方向吗?

谢谢

2 个答案:

答案 0 :(得分:3)

这应该有效:

(uk:\d+,\d+,\w,\w+,\w+)

Demo

它会查找uk:,然后它就会从那里开始计算。

修改

由于OP现已澄清他们正在使用的内容只能删除字符串:

,?[^u][^k]:\d+,\d+,\w,\w+,\w+

Demo 2

这会查找一个可选的逗号,后面跟着两个不是u而不是k的字母,然后是冒号(:),然后是正则表达式的其余部分是一样的。

答案 1 :(得分:0)

我建议使用这样一个简单的正则表达式:

(\buk:.+?,Page)(?:,|$)

并抓住匹配的组#1

RegEx Demo