Regex 多个正则表达式查询(记事本和)

Regex 多个正则表达式查询(记事本和),regex,replace,notepad++,Regex,Replace,Notepad++,我知道我可以用这种方式执行多个搜索和替换查询: 搜索:(á)|(é)|(í)|(ó)|(|) 替换:(?1Á)(?2É)(?3Í)(?4Ó)(?5Ú) 例如: 之前:arbolacido 之后:Árbolácido 但是,如果我需要添加一个前提条件,例如行开始和它前面的一些标点符号,那么如何使用这个方法呢 我试过: 搜索:(^[-?«]*?)[(á)|(í)|(ó)|(|)]=>有效 替换:\1(?2Á)(3É)(4Í)(5Ó)(6Ú)=>不起作用 例如: 之前:-?árbolácido 之后:

我知道我可以用这种方式执行多个搜索和替换查询:

搜索:(á)|(é)|(í)|(ó)|(|)

替换:(?1Á)(?2É)(?3Í)(?4Ó)(?5Ú)

例如:

之前:arbolacido

之后:Árbolácido

但是,如果我需要添加一个前提条件,例如行开始和它前面的一些标点符号,那么如何使用这个方法呢

我试过:

搜索:
(^[-?«]*?)[(á)|(í)|(ó)|(|)]
=>有效

替换:
\1(?2Á)(3É)(4Í)(5Ó)(6Ú)
=>不起作用

例如:

之前:-?árbolácido

之后:-rbolAcido

有什么帮助吗


注意。

在第二个正则表达式中,您使用字符类(由
[…]
指示)-根据注释进行分组。但这不是它们的工作原理。改用非捕获组,例如

(^[—¿¡«]*?)(?:(á)|(é)|(í)|(ó)|(ú))

除了为每个字符创建一个组外,还可以将所有字符放在一个组中,并将其替换为大写变体

  • 搜索字符串

    (^[—¿¡«]*)([áéíóú])
    
  • 替换

    $1\U$2
    
可在中找到以下内容:

\U
导致下一个字符以大写输出,直到找到
\E


为什么在第二个示例中突然使用
[]
字符类?如果我不加[],前提条件只影响第一个参数(在本例中为“,”)。如果我为每个参数添加前提条件,我将超过10个参数的限制。使用非捕获组仅用于分组目的,字符类在这里是错误的工具<代码>(^[-?«]*?)(?:(á)|(|)|(ó)|(|))它就像一个符咒!非常感谢。谢谢你,约翰,但是记事本++不明白“Á”(或其他任何一个)是“á”的首都。啊,我想会的。那么我将删除这个答案。