正则表达式查找第 n 个逗号并删除逗号以及值

Posted

技术标签:

【中文标题】正则表达式查找第 n 个逗号并删除逗号以及值【英文标题】:Regex to find the nth comma and remove the comma as well as the value 【发布时间】:2022-01-13 13:21:42 【问题描述】:

尝试删除第三个逗号和逗号之后的值

a,b,c,d,e,f 
g,h,i,asj,k,l

如何编写正则表达式来查找 3 个逗号并删除 ,d 和 ,asj ?我试过这个/(?=(,[^,]0,3\n 但无法让它工作

【问题讨论】:

为什么你的正则表达式中有\n?这将匹配换行符,但您没有换行符。 ^([^,]*(?:,[^,]*)2),[^,]* > $1 (demo) 0,3 表示 0 到 3 个匹配项,而不是 3 个匹配项。 您的( 没有匹配的)。这甚至不是一个完整的正则表达式。 【参考方案1】:

在这里应用惰性匹配概念并在第 3 个逗号左右之后删除值,请尝试使用所示示例编写和测试的正则表达式。

^((?:.*?,)3)[^,]*,(.*)$

Online demo for above regex

说明:为上述正则表达式添加详细说明。

^((?:.*?,)3)  ##Matching from starting of value and creating 1st capturing group which has everything till 3rd comma in it. Using lazy match .*?
                ##to make sure its not a greedy match(in a non-capturing group, to avoid creating 2 groups).
[^,]*,          ##Matching everything till next occurrence of comma including that comma.
(.*)$           ##Creating 2nd capturing group which has everything in it till end of the value.

【讨论】:

【参考方案2】:

你可以使用

^([^,]*(?:,[^,]*)2),[^,]*

替换为 $1 以恢复捕获的 Group 1 值。请参阅regex demo。

详情

^ - 字符串开头 ([^,]*(?:,[^,]*)2) - 第 1 组: [^,]* - 零个或多个除逗号以外的字符 (?:,[^,]*)2 - 出现两次逗号,然后出现零个或多个逗号以外的字符 , - 逗号 [^,]* - 零个或多个除逗号以外的字符。

【讨论】:

以上是关于正则表达式查找第 n 个逗号并删除逗号以及值的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用啥正则表达式在逗号分隔列表中查找 Nᵗʰ 条目?

教你notepad++用正则表达式替换掉各行逗号前面内容

Bigquery 正则表达式 - 删除双引号中的逗号

正则表达式 - 匹配第二个逗号(或逗号和空格)之后的所有内容

正则表达式 最近在做文本清洗,遇到(,,!或者?!!,),想要清除第一个逗号后面的所有多余标点符号

如何通过 Oracle 中的正则表达式从逗号分隔列表中删除重复项,但我不想要重复值? [复制]