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

Regex 查找行中第n个匹配项内的字符串或子字符串,regex,string,search,replace,sublimetext3,Regex,String,Search,Replace,Sublimetext3,我想在引号中找到第三个字符串,以替换该字符串或该字符串的一部分。这是我必须处理的一个典型问题: “/activities/absenceactivity/lang/#lang_ID#/prop_dialog.php”;“BA2_PD_SCR”;“Opis 多戈德卡”;“事件描述”;“描述事件”;"ÐÐ¿Ð¸Ñ Ð¿Ð¾Ð´ÑÑ";"";“vykio aprašymas”;“描述事件”;""; 我知道“([^“]*)”显示了所有出现的文本和引号,但我只想得到第三个,在本例中是“Opis dogod

我想在引号中找到第三个字符串,以替换该字符串或该字符串的一部分。这是我必须处理的一个典型问题:

“/activities/absenceactivity/lang/#lang_ID#/prop_dialog.php”;“BA2_PD_SCR”;“Opis 多戈德卡”;“事件描述”;“描述事件”;"ÐÐ¿Ð¸Ñ Ð¿Ð¾Ð´ÑÑ";"";“vykio aprašymas”;“描述事件”;"";

我知道“([^“]*)”显示了所有出现的文本和引号,但我只想得到第三个,在本例中是“Opis dogodka”,以便在崇高文本中执行搜索和替换

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

“”

字符串


谢谢。

我相信有一些方法可以进一步简化,但如果您同意暴力:

崇高命令:

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

sed:


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

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

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

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

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

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

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

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

升华命令可能重复:“[^”]*”;“[^”]*”;“([^”]*)”*查找整行,但我不知道$1的作用。我需要替换第三个引号位置内的特定字符串,有时这是“引号内的整个字符串”,在某些情况下只是一个子字符串,例如只是字符“s”。请注意搜索字符串中的括号<代码>$1表示搜索字符串中第一组括号中的数据。查看@andrej,它可能有助于您写出所需替换结果的示例。
 /^"[^"]*";"[^"]*";("[^"]*";)/
/^(?:"[^"]*";){2}("[^"]*";)/