Notepad++如何在每第n个字符串/字符出现时插入新行?

10
使用 Notepad++ 的“查找和替换”功能,我想在每个字符或字符串(在我的情况下是逗号)的第n次出现时插入一个新行。
我已经尝试了下面的正则表达式,使用“正则表达式”模式,但没有成功。
查找内容:((,){1000})
替换为:\1\n

这会起作用吗:(((.*?), ){1000})?我无法理解这个正则表达式。 - Pugazh
你评论中的正则表达式看起来更接近,你试过了吗? - Tim Biegeleisen
不是很清楚:fileline 中的每个第 n 次出现? - Wiktor Stribiżew
1
如果要匹配一行,您可以使用 (?:[^\n\r,]*,){2}(或者您的方法也可以 - (?:.*?,){2})-> $&\n 在每两个逗号后插入一个 \n - Wiktor Stribiżew
1个回答

17

如果您想在每行字符串的第n个出现后添加换行符,我会使用以下代码:

(?:.*?,){2}

并且用$&\n(或$&\r\n)替换,其中.*?匹配除换行符以外的任意0个或多个字符,尽可能少地匹配到,的第一个出现位置。 $&是对整个匹配值的反向引用(用2来使演示更清晰,1000是相当大的值)。查看演示,每两个,之间都会放置一个换行符。

使用单个字符时,最好使用否定字符类(但在其中添加换行符以强制模式不跨越行):

(?:[^\n\r,]*,){2}

在此输入图片描述


你会在vim中如何实现这个? - Daniel van Flymen
@DanielvanFlymen:在Vim中,你需要使用\r来插入一个新行。由于Vim字符类不能匹配换行符,所以在[...]中不需要使用\n\r。而对于整个匹配的反向引用则是使用&。因此,你可以尝试使用:%s/\([^,]*,\)\{2}/&\r/g - Wiktor Stribiżew

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