查找行中第n个匹配项内的字符串或子字符串

时间:2017-10-10 16:25:42

标签: regex string search replace sublimetext3

我想在引号内找到第三次出现的字符串,以便替换此字符串或此字符串的一部分。这是我必须处理的典型行:

  

“/活动/ absenceactivity /郎/#LANG_ID#/ prop_dialog.php”; “BA2_PD_SCR”;“OPIS   dogodka“;”事件描述“;”Descrição o做Evento“;”ÐÐ¿Ð¸Ñ   Ð¿Ð¾Ð'ÑÑ“;”“;”č®vykioaprašymas“;”Descripcióndelevento“;”“;

我知道“([^”] *)“显示每次出现的文字和引号但是我想得到第三个,在这个例子中是”Opis dogodka“,以便在Sublime中执行搜索和替换文本。

问题是在引号中找到第三次出现的字符串,将其全部或部分替换,并确保正则表达式还提供空的解决方案

  

“”

的字符串。

谢谢。

2 个答案:

答案 0 :(得分:1)

我确定有办法进一步简化这一点,但如果你能用蛮力来解决这个问题:

Sublime命令:

 Find: "[^"]*";"[^"]*";"([^"]*)".*
 Replace: $1

NP ++:

 Find what: "([^"]*)";"([^"]*)";"([^"]*)".*
 Replace with: $3

sed的:

 sed 's/"\([^"]*\)";"\([^"]*\)";"\([^"]*\)".*/\3/'

答案 1 :(得分:0)

您可以使用{}模式重复:

/(?:"([^"]*)";){3}/   # first match group will be 'Opis dogodka'

Demo

或者,使用全局类型匹配,然后进行第三次匹配。这可能需要切片或循环等逻辑:

/"([^"]*)";/g

Demo 2

或者,只需手动输入前两个模式即可跳过:

 /^"[^"]*";"[^"]*";("[^"]*";)/

Demo 3

或者将重复组合跳过第一个n-1然后捕获第n个匹配:

/^(?:"[^"]*";){2}("[^"]*";)/

Demo 4