用逗号空格替换空格的正则表达式,除了行尾

J.C*_*ter 8 regex perl

我试图隐藏这个输入文件的内容:

NP_418770.2: 257-296 344-415 503-543 556-592 642-707
YP_026226.4: 741-779 811-890 896-979 1043-1077
Run Code Online (Sandbox Code Playgroud)

对此:

NP_418770.2: 257-296, 344-415, 503-543, 556-592, 642-707
YP_026226.4: 741-779, 811-890, 896-979, 1043-1077
Run Code Online (Sandbox Code Playgroud)

即,用逗号和空格替换空格(不包括换行符)

为此,我尝试过:

perl -pi.bak -e "s/[^\S\n]+/, /g" input.txt
Run Code Online (Sandbox Code Playgroud)

但它给出了:

NP_418770.2:, 257-296, 344-415, 503-543, 556-592, 642-707
YP_026226.4:, 741-779, 811-890, 896-979, 1043-1077
Run Code Online (Sandbox Code Playgroud)

如何在不写另一个正则表达式的情况下停止出现在":"之后出现的额外逗号(我想要":"和单个空格)?

谢谢

Niy*_*wan 10

尝试使用正则表达式负面lookbehind.基本上看,空格前的字符是冒号(:),然后它与该空格不匹配.

s/(?<!:)[^\S\n]+/, /g
Run Code Online (Sandbox Code Playgroud)

  • 或者`s /(?<!:)\h + /,/ g`. (2认同)