gpt4 book ai didi

regex - 几个表达式中的 Perl & Sed 字符串替换

转载 作者:行者123 更新时间:2023-12-02 08:26:35 24 4
gpt4 key购买 nike

我想以非贪婪匹配方式进行字符串替换

  • 去掉所有前导和尾部的破折号、撇号(当这些符号出现在单词的中间时,必须保留它们)

  • 将多个空格转换为1个空格

例子:

--ONE   Tw'o--   -333-   -'FO-UR'

必须成为

ONE Tw'o 333 FO-UR

我无法得到准确的结果。你能帮我更正下面的 perl 和 sed 语法吗?

$ echo "--ONE   Tw'o--   -333-   -'FO-UR'" \
| perl -pe "s/[-']+(.+?)/\1/g" \
| perl -pe "s/(.+?)[-']+/\1/g" \
| perl -pe "s/\s+/ /g"

Result (perl): "ONE Two 333 FOUR"

$ echo "--ONE Tw'o-- -333- -'FO-UR'" \
| sed -r -e "s/[-']+(.+?)/\1/g" \
-e "s/(.+)[-']+/\1/g" \
-e "s/\s+/ /g"

Result (sed): "ONE Tw'o-- -333- -'FO-UR"

最佳答案

这是 perl 版本:

echo "--ONE   Tw'o--   -333-   -'FO-UR'" | perl -ne "s|-'||g; s|'-||g; s|^'||; s|'$||; s|^-+||; s|-+$||; s|-+\s+| |g; s|\s+-+| |g; s|\s+| |g; s|\s+$||; print;"

ONE Tw'o 333 FO-UR

sed 版本基本相同:

echo "--ONE   Tw'o--   -333-   -'FO-UR'" | sed -r -e "s|-'||g; s|'-||g; s|^'||; s|'$||; s|^-+||; s|-+$||; s|-+\s+| |g; s|\s+-+| |g; s|\s+| |g; s|\s+$||;"

ONE Tw'o 333 FO-UR

所用正则表达式的注释:

s|-'||g;     # Remove dash followed by quote everywhere
s|'-||g; # Remove quote followed by dash everywhere
s|^'||; # Remove leading quote
s|'$||; # Remove trailing quote
s|^-+||; # Remove leading dash characters
s|-+$||; # Remove trailing dash characters
s|-+\s+| |g; # Replace dash characters followed by whitespace with 1 space everywhere
s|\s+-+| |g; # Replace whitespace followed by dash characters with 1 space everywhere
s|\s+| |g; # Replace multiple spaces with 1 space
s|\s+$||; # Remove trailing spaces

关于regex - 几个表达式中的 Perl & Sed 字符串替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31690471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com