解释
在 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