gpt4 book ai didi

regex - 如何删除一行中匹配项之间的所有文本?

转载 作者:行者123 更新时间:2023-12-02 08:39:58 25 4
gpt4 key购买 nike

我有这个问题:

输入文字:

this is my text text text and more text
this is my text myspace this is my text
this space is my text space this is my
this is my text this is my text
this space is my text space space myspace

假设我想搜索“空间”
我想将其作为输出:

this is my text text text and more text
space
space space
this is my text this is my text
space space space space

同一行的匹配必须用空格分隔。
没有匹配项的行必须保持原样。

对于所有其他搜索项也是如此。

今天下午我试图实现这一点,但没有成功。
谁能帮帮我?

最佳答案

解决方案:

:g/space/s/\(.*space\).*$/\1/|s/.\{-}space/space/g|s/^//

说明:

这很棘手,但可以做到。但是,它不能使用单个正则表达式来完成。

我们做的第一件事是在最后一场比赛之后摆脱任何东西(我们实际上利用了正则表达式默认情况下贪婪的事实):

s/\(.*space\).*$/\1/

然后我们删除所有内部匹配之间的任何内容(注意我们在这里使用 * 的惰性版本,\{-}):

s/.\{-}space/ space/g

上一步会在结果中留下一个初始空间,所以我们去掉它:

s/^ //

幸运的是,在 vim 中,我们可以使用 | 字符将替换链接在一起。所以,把它们放在一起:

:g/space/s/\(.*space\).*$/\1/|s/.\{-}space/ space/g|s/^ //

关于regex - 如何删除一行中匹配项之间的所有文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17495995/

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