【问题标题】:Finding the string or substring within nth occurrence in a line查找一行中第 n 次出现的字符串或子字符串
【发布时间】:2018-03-22 03:27:21
【问题描述】:

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

"/activities/absenceactivity/lang/#LANG_ID#/prop_dialog.php";"BA2_PD_SCR";"Opis dogodka";"事件描述";"Descrição do Evento";"ÐÐ¿Ð¸Ñ Ð¿Ð¾Ð´ÑÑ";"";"č®vykio aprašymas";"Descriptción del evento";"";

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

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

""

字符串。

谢谢。

【问题讨论】:

标签: regex string search replace sublimetext3


【解决方案1】:

我确信有办法进一步简化这一点,但如果你对蛮力没问题:

崇高的命令:

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

NP++:

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

sed:

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

【讨论】:

  • Sublime command: "[^"]*";"[^"]*";"([^"]*)".* 找到整行但我不知道 $1 是什么确实。我需要替换第三个引号位置内的特定字符串,有时这是“引号内的整个字符串”,在某些情况下只是一个子字符串,例如只是字符“s”。
  • 注意搜索字符串中的括号。 $1 表示搜索字符串中第一组括号中的数据。查看grymoire.com/Unix/Regular.html#uh-10
  • @andrej 它可以帮助您写出所需替换结果的示例。
【解决方案2】:

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

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

Demo

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

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

Demo 2

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

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

Demo 3

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

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

Demo 4

【讨论】:

    猜你喜欢
    • 2010-12-25
    • 1970-01-01
    • 2018-08-24
    • 2011-02-04
    • 2021-02-10
    • 2016-05-07
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多