简单的 REGEX - 如何获取以“|”开头的所有行 - [Pipeline] 到上面以 [Pipeline] 结尾的行

简单的 REGEX - 如何获取以“|”开头的所有行 - [Pipeline] 到上面以 [Pipeline] 结尾的行

解释

在 REGEX 的帮助下,我尝试将意大利语同义词数据库转换为以下格式:

synonym1|synonym2|synonym3
anothersynonym1|anothersynonym2
...........
......

目前我有以下格式的未转换的同义词数据库:

a|       - word
|per     -it's synonym
|verso   -another synonym of the word "a" in the second row
abate|    - second word
|priore|superiore
abbacchiare|
|avvilire|deprimere
abbacchiarsi|
|abbattersi|abbiosciarsi|accasciarsi

澄清: 我想使用正则表达式来匹配以“|”(管道)开头的所有行,并将它们移动到上面的行以与以(管道)结尾的行匹配的单词合并,并且还移动到以“|”开头的行(第二 - 第三 - 第四行同义词可以合并在一起,显然当合并具有“结束和开始”管道的行时,应该删除其中一个(管道)以获得所需的格式:

上述从未转换的数据库转换而来的数据库示例

a|per|verso
abate|priore|superiore
abbachiare|avvilire|deprimere
abbachiarsi|abbattersi|abbiosciarsi|accasciarsi

有人能帮助我使用任何文本编辑器中的 FIND 和 REPLACE 函数来找到精确的正则表达式吗?

答案1

如果您使用的是 Windows,则可以使用扩展搜索模式记事本++分两步完成:

1:替换|\r\n||- 这将找到所有第一个同义词

首先替换

a|per
|verso
abate|priore|superiore
abbacchiare|avvilire|deprimere
abbacchiarsi|abbattersi|abbiosciarsi|accasciarsi

2:替换\r\n||- 这将查找所有后续同义词

第二次替换

a|per|verso
abate|priore|superiore
abbacchiare|avvilire|deprimere
abbacchiarsi|abbattersi|abbiosciarsi|accasciarsi

答案2

perl -ne 'chomp; print /^(.*)\|\s*$/?"\n$1":$_' filename

a|per|verso
abate|priore|superiore
abbacchiare|avvilire|deprimere
abbacchiarsi|abbattersi|abbiosciarsi|accasciarsi

或者,如果您对前导和尾随换行符很挑剔:

perl -ne 'chomp; print /^(.*)\|\s*$/?$.==1?$1:"\n$1":$_;END{print"\n"}' filename
a|per|verso
abate|priore|superiore
abbacchiare|avvilire|deprimere
abbacchiarsi|abbattersi|abbiosciarsi|accasciarsi

相关内容