使用正则处理一个词头对应多个页码的情况

例如

张三 1,2,3
李四 4,5,6

首先通过筛选英文逗号,仅显示这些特征行,方便处理。
然后使用正则:

,
\n\t

把逗号替换为换行+页码:

张三 1
2
3
李四 4
5
6

现在要做的是把词头填进去。Emeditor自带快速填充功能,双击词头右下角就可以快速把词头填进去,。
但在这里显然不能这么做。还是得用正则。但正则的问题是怎么捕获词头放到下一行的tab前面。

^([一-龥]+)(.+?\d+?\n)(\t\d+)
\J "\0".replace(/\3/g,"\1\3")

因为这里词头对应三个页码,那么就需要再点一次替换全部。最终得到结果:

张三 1
张三 2
张三 3
李四 4
李四 5
李四 6

不过现在试图再次运行这个正则出现了报错:
image
关闭之后Emeditor也出错了。重新打开之后就正常了。


楼下 freecomic101给出了另一个思路,那就是把带有多个页码的字符串首先切分为词头+tab+第一个页码,然后加入一个换行,再插入词头+tab+余下页码,让我们称之为字符串2。经过一次替换,词头和紧挨着的第一个页码被分割出来,而字符串2在下一次替换之中,又又会被分割到一个页码。每一次循环都为下一步循环做了铺垫,真是精妙。

(^.+?)\t([0-9]+),(.+?)\n
\1\t\2\n\1\t\3\n
2 Likes

请问用的是什么编辑软件?

自动填充用excel比较简单

PDAWidi 论坛中正好有Excel填充的问题,似乎可套用:

https://www.pdawiki.com/forum/forum.php?mod=redirect&goto=findpost&ptid=45267&pid=2461246

厉害啊,正则还可以这样用,我没完全看懂,一部分要靠猜。

正则用的很棒,谢谢分享。其中“最多只要点三下就好了” 的三下不是很准确,点击的次数应该是和数字最多的那一条的数字个数N有关,点击次数为(N-1),完全可行。佩服!

不好意思啊,我是新人,向您学习来的,上面的回复只是举一反三,请见谅。