多次替换一行中的相同字符 Notepad++

Replace same character on one line multiple times Notepad++

我有很多文件,每个文件中都有一行包含以下内容(除其他外)。这条线并不总是在同一个地方,但是,它从该行的开头开始。这条线也总是不同的。

slug: bláh-téxt-hello-write-sométhing-ábout-arrow

我想用相应的字符 a 和 e 替换每次出现的特殊字符(á 和 é)。这些字符中的每一个都可以多次出现在这一行中 + 也可以出现在文档中的其他地方(不应被替换)。

所以结果是:

slug: blah-text-hello-write-something-about-arrow

我有这个: 查找:^slug: (.)((é)|(á))(.) 替换:子弹:$1(?2e)(?2a)$3

但是,这似乎一次只能替换一个字符。如何多次将其设置为 运行 直到没有字符可替换?

非常感谢您的任何见解。

你可以使用

查找内容(?:\G(?!^)|^slug:\h*)[^\r\náé]*\K(?:(á)|é)
或者
查找内容(?:\G(?!^)|^slug:\h*).*?\K(?:(á)|é)
替换为(?1a:e)

详情:

  • (?:\G(?!^)|^slug:\h*) - 上一场比赛结束或 slug: 然后在一行的开头有零个或多个水平空格
  • [^\r\náé]* - 除 CR、LF、áé
  • 之外的零个或多个字符
  • .*? - 将匹配除换行字符以外的零个或多个字符,尽可能少
  • \K - 丢弃到目前为止匹配的所有文本的运算符
  • (?:(á)|é) - á(捕获到第 1 组)或 é.

在替换中,如果第 1 组匹配,(?1a:e) 将找到的匹配项替换为 a,否则,使用 e

regex demo.

有关使用条件替换的更多信息,请参阅我的“Swapping multiple values using conditional replacement patterns in Notepad++”YT 视频。

关于使用 \G 操作符的额外信息可以在我的另一个 YT 视频“\G anchor use cases”中找到。