【问题标题】:Replace same character on one line multiple times Notepad++多次替换一行上的相同字符 Notepad++
【发布时间】:2021-12-13 03:20:06
【问题描述】:

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

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

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

所以结果是:

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

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

但是,这似乎一次只替换一个字符。如何让它运行多次,直到没有要替换的字符?

非常感谢您提供任何见解。

【问题讨论】:

    标签: regex notepad++ nsregularexpression find-replace


    【解决方案1】:

    你可以使用

    查找内容(?:\G(?!^)|^slug:\h*)[^\r\náé]*\K(?:(á)|é)

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

    详情

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

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

    regex demo.

    我的“Swapping multiple values using conditional replacement patterns in Notepad++”YT 视频中提供了有关使用条件替换的更多信息。

    有关使用 \G 运算符的更多信息可以在我的另一个 YT 视频“\G anchor use cases”中找到。

    【讨论】:

    • 哇。非常感谢。很酷。不错的视频:)。如果我错了,请纠正我,但如果我想添加更多字符来搜索/替换。我会这样做:找到: (?:\G(?!^)|^slug:\h*)[^\r\náéíñ]*\K(?:(á)|(é)|(í)| (ñ)) 替换:(?{1}a:?{2}e:?{3}i:n)
    • @KennethBrowning 是的,您可以向正则表达式和条件替换模式添加更多字符/组。为了更短,您可以将[^\r\náéíñ]* 替换为.*?
    猜你喜欢
    • 1970-01-01
    • 2014-05-15
    • 2021-11-07
    • 2020-08-31
    • 2017-12-17
    • 2011-07-01
    • 2016-11-05
    相关资源
    最近更新 更多