gpt4 book ai didi

regex - 在另一个字符之后查找多次出现的字符

转载 作者:行者123 更新时间:2023-12-01 23:27:04 27 4
gpt4 key购买 nike

我需要在另一个字符之后查找并替换多次出现的字符。

我的文件看起来像这样:

b
a
b
b

我需要用 c 替换 a 之后的所有 b:

b
a
c
c

我想到了这个:a((\n|.)*)b 作为查找表达式,a$1c 作为替换选项,但它仅替换最后一个匹配项而不是所有匹配项。

我正在使用 VSCode 的全局搜索和替换选项。

我找到了一个肮脏的方法来实现我想要的:我在 .* 匹配一次之后添加一个 ? 惰性量词,然后应用替换。然后我可以再做一次,它将取代下一场比赛。我这样做,直到所有出现的地方都被替换。

但是,如果有数千个匹配项,这将无法使用,知道是否有正确的方法来做到这一点将非常有趣,只有 1 个找到。

如何匹配a之后的所有b

最佳答案

你可以使用

(?<=a[\w\W]*?)b

替换为c . 详细信息:

  • (?<=a[\w\W]*?) - 与紧接在 a 之前的位置相匹配的正后视然后是任意零个或多个字符(尽可能少)
  • b - 一个 b .

另请参阅 Multi-line regular expressions in Visual Studio Code了解更多跨行匹配任何字符的方法。

演示:

enter image description here

替换后:

enter image description here

如果你需要使用类似这样的东西来替换多个文件,你需要知道在文件搜索和替换 VSCode 功能中使用的 Rust 正则表达式确实不那么强大并且不支持这两个 \K , 也不 \G ,也不是无限宽度的后视。我建议使用 Notepad++ Replace in Files 特点:

enter image description here

(?:\G(?!\A(?<!(?s:.)))|a)[^b]*\Kb模式匹配

  • (?:\G(?!\A(?<!(?s:.)))|a) - 两个选项之一:
    • \G(?!\A(?<!(?s:.))) - 上一次成功匹配的结束( (?!\A(?<!(?s:.))) 是从 \G 中排除文件位置开始所必需的)
    • | - 或者
    • a - 一个 a
  • [^b]* - 除 b 以外的任何零次或多次出现的字符
  • \K - 省略匹配的文本
  • b - 一个 b字符。

关于regex - 在另一个字符之后查找多次出现的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67059318/

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