使用正则表达式删除逗号之前的所有内容

3
我正在尝试从类似数组中删除并替换第13个逗号之前的所有内容:
{1,1,0,0,0,4,0,0,0,0,20,4099,4241,706,706,714,714,817,824,824,824,2,2,2,2,1,1,1,1},

翻译为:

变成什么样子:

{706,706,714,714,817,824,824,824,2,2,2,2,1,1,1,1},

参考:我正在使用Notepad++中的正则表达式。

我发现这个regex字符串可以匹配从特定逗号开始一直到行末的所有内容:

,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*$

但是我如何将其调整为从开头开始呢?
非常感谢您的时间和帮助,谢谢。

{btsdaf} - Wiktor Stribiżew
{btsdaf} - Tim Biegeleisen
@TimBiegeleisen 我认为楼主已经做到了 - Wiktor Stribiżew
{btsdaf} - Tim Biegeleisen
@Steve,请考虑接受最适合您的答案,并考虑为对您有帮助的任何答案点赞。 - Wiktor Stribiżew
3个回答

2

$匹配主题字符串的结尾不同,^匹配开头。因此,如果你想匹配到包括第13个逗号在内:

^[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*, 

用"{"替换。

2

您可以使用

{(?:[^,}]*,){13}

只需用简单的 { 替换。请参见正则表达式演示。即使您有跨越多行并且在两个 {...} 子字符串之间的项目少于 13 个的情况,此版本也可以正确地工作。

细节

  • { - 一个 {
  • (?:[^,}]*,){13} - 连续出现 13 次
    • [^,}]* - 除了 ,}} 很重要,以避免从一个 {...} 子字符串溢出到另一个子字符串)之外的 0 个或多个字符
    • , - 逗号

您还可以使用

{\K(?:[^,}]*,){13}

并用空字符串替换。请参见另一个正则表达式演示。您无需使用{进行替换,因为\K会省略匹配中的第一个{,因此它将保留在最终文本中。

enter image description here


1
尝试以下查找和替换:

查找:

\{(?:[^,]*,){13}(.*)

Replace:

{$1

上述模式可以根据您对括号字符串出现位置的期望、您想要覆盖/避免的边缘情况等进行微调。

演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接