gpt4 book ai didi

regex - 正则表达式删除最后两个破折号的输出

转载 作者:太空狗 更新时间:2023-10-29 12:22:47 26 4
gpt4 key购买 nike

我可以有两个输入 1234-5-8888-8978 或 1234-8888-8978 我只想删除最后两个破折号(hypen)之后的字符串。

输入:1234-5-8888-8978输出:1234-5(删除最后两个连字符后的内容)输入:1234-8888-8978输出:1234(删除最后两个连字符后的内容)

我在用东西

echo "1234-5-8888-8978" | sed -n  's/.*\(-[0-9]*-[0-9]*$\)/\1/p'
-8888-8978

echo "1234-8888-8978" | sed -n 's/.*\(-[0-9]*-[0-9]*$\)/\1/p'
-8888-8978

但我希望输出排除这种模式

最佳答案

您需要捕获连字符之前的部分:

sed 's/\(.*\)-[0-9]*-[0-9]*$/\1/' <<< "1234-5-8888-8978"
# => 1234-5 (POSIX BRE)
sed -E 's/(.*)-[0-9]*-[0-9]*$/\1/' <<< "1234-8888-8978"
# => 1234 (POSIX ERE)

参见 online demo

但更合适的做法是只删除连字符之间的最后两部分

sed 's/-[0-9]*-[0-9]*$//' <<< "1234-5-8888-8978"
# => 1234-5 (POSIX BRE will suffice)

参见 another demo

-[0-9]*-[0-9]*$ 模式匹配 - 后跟字符串末尾两次 0+ 数字.它可以在 POSIX ERE 语法中写成 (-[0-9]*){2}$\(-[0-9]*\)\{2\}$ 在 POSIX BRE 语法中。

关于regex - 正则表达式删除最后两个破折号的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53834195/

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