2017-10-10 157 views
3

我想要在引号内找到第三个字符串以替换此字符串或此字符串的一部分。这是一个典型的线我不得不面对:在行中找到第n个字符串或子字符串

“/activities/absenceactivity/lang/#LANG_ID#/prop_dialog.php";"BA2_PD_SCR";"Opis dogodka”;“活动说明”;”描述事件“;”兴奋剂“;”兴奋剂“;”“;”

我知道“([^”] *)”显示文本和报价的每次出现,但我希望得到的只是第三个,在这个例子中‘为了执行搜索&替换OPIS dogodka’在崇高的文本。

问题是要找到引号中的字符串的第三次出现,完全或只是部分地取代它,并确保正则表达式还提供了一个空

的解决方案“”

字符串。

谢谢。

+0

的[正则表达式:匹配第n occurence]可能的复制(https://stackoverflow.com/questions/28438693/regex-match-nth-occurence) – ashwin153

回答

0

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

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

Demo

或者,使用全局类型匹配,然后采取第三场比赛。这可能需要逻辑,诸如切片或循环:

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

Demo 2

或者,只是手动把前两个模式跳过:

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

Demo 3

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

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

Demo 4

1

我敢肯定有很多方法可以进一步简化,但如果你真行,以蛮力:

崇高命令:

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

NP ++:

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

SED :

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

卓异命令: “[^”] * “;”[^“] *”;“([^”] *)“。*找到整行,但我不知道$ 1是干什么的。我需要替换第三个引用位置中的特定字符串,有时这是“引号内的整个字符串”,在某些情况下只是一个子字符串,例如只是字符“s”。 – andrej

+0

注意搜索字符串中的括号。 “$ 1”表示搜索字符串中第一组圆括号中的数据。看看http://www.grymoire.com/Unix/Regular.html#uh-10 – CoreyJJohnson

+0

@andrej它可以帮助你写出一个期望的替代结果的例子。 – CoreyJJohnson

相关问题