重新排序后,插入一个空行,更改第一个和第二个连字符的顺序

After re-order line, insert a blank line, change order first and second hyphen

我在
中的上一个问题post How can I get a line break After each name change
Toto Thank You
提出了一个很好用的解决方案 但是,有时我可以更改在第二个连字符“-”之后插入一行“-”
当我通过颠倒第一个和第二个连字符
之间的顺序来更改顺序时 我想得到这个:

之前:
Bob Cleatry - 八月 - 6325.32 - 美国俄勒冈州波特兰
john Cleatry - 十月 - 7289.25 - 美国俄勒冈州波特兰
Alan Cleatry - 11 月 - 12.582.00 - 美国俄勒冈州波特兰
Peter J. Finley - 9 月 - 5312.00 - 美国新泽西州
Peter J. Finley - 十月 - 7325.00 - 美国新泽西州
Peter J. Finley - 十一月 - 8240.00 - 美国新泽西州
杰克诺顿 - 十月 - 12425.60 - 美国纽约
celine Norton - 十一月 - 13328.32 - 美国纽约

使用正则表达式重新排序:
第一步
查找:^(.+?)\s-\s+(.+?)\s-\s+(.+?)\s-\s
替换:$2 - $1 - $3

注意:我在连字符“-”前后附加 space 以消除名称复合、复合 ex:jean-claude 和 URL 等中的连字符...

在第 1 步之后。
八月 - Bob Cleatry - 6325.32美国俄勒冈州波特兰
十月 - john Cleatry - 7289.25美国俄勒冈州波特兰
十一月 - Alan Cleatry - 12.582.00美国俄勒冈州波特兰
九月 - Peter J. Finley - 5312.00美国新泽西州
十月 - Peter J. Finley - 7325.00 美国新泽西州
十一月 - Peter J. Finley - 8240.00 美国新泽西州
十月 - 杰克诺顿 - 12425.60美国纽约
十一月 - celine Norton - 13328.32美国纽约

我想要这个:

8 月 - Bob Cleatry - 6325.32 美国俄勒冈州波特兰
十月 - john Cleatry - 7289.25美国俄勒冈州波特兰
十一月 - Alan Cleatry - 12.582.00美国俄勒冈州波特兰

9 月 - Peter J. Finley - 5312.00 美国新泽西州
十月 - Peter J. Finley - 7325.00 美国新泽西州
十一月 - Peter J. Finley - 8240.00 美国新泽西州

10 月 - 杰克诺顿 - 12425.60 美国纽约
十一月 - celine Norton - 13328.32美国纽约

您可以在重新排序之前添加一个步骤,匹配所有以例如开头的行:

^(.+?)\s-\s.*(?:\R.*)+

Regex demo

然后在替换中,使用换行符包围的完整匹配。

\n[=11=]\n

对于第二步,您可以使用您已经在问题中使用的方法。


假设已经没有换行符,如果你不想在替换时在字符串的开头或结尾添加额外的换行符,你可以使用条件替换。

查找内容:

(?:(^)|\R)((.+?)\s-\s.*(?:\R.*)+)(?:(\R)|$)

替换为:

(?{1}:\n\n)(?{4}\n\n:)

重新订购