使用notepad ++中的regex在xml标签中的字符串中查找特定单词?

时间:2018-02-06 12:13:11

标签: regex xml notepad++

<name>我的名字是汤姆,但人们称我为XYZ但我的真名是汤米!</name&gt;

  • 现在,我想在指定的xml标记内找到“Tom”,并将其替换为Harry。
  • 查找“Tom”的多个实例,并将其替换为指定XML标记内的字符串中的“Harry”。

示例: (?<=<name>)[a-zA-Z]*(Tom)[a-zA-Z]*(?=<\/name>)

  • 这无法从XML标记之间的指定字符串中找到单词“Tom”。

2 个答案:

答案 0 :(得分:1)

找到:(?<=<name>)(.*?)(Tom)(?=\b.*</name>)
替换为:$1Harry

细节:
Balise名称:(?<=<name>)
姓名与汤姆(.*?)之间的任何内容 汤姆(Tom)
检查Tom (?=\b字的结尾的boudary 汤姆与结束名称balise .*之间的任何内容 结束应答</name>)

重新显示应答器名称和tom $1之间的内容 由哈利替换汤姆Harry

答案 1 :(得分:1)

由于name标记内部不能包含任何其他标记,因此可以解决问题的正则表达式是

(?:\G(?!^)|<name>)[^<]*?\K\bTom\b

请参阅regex demo。替换为Harry

<强>详情

  • (?:\G(?!^)|<name>) - 上一次成功匹配(\G(?!^))或(|<name>子字符串
  • 的结束
  • [^<]*? - <以外的任何0 +字符,尽可能少
  • \K - 匹配重置运算符
  • \bTom\b - 整个字Tom(如果您需要匹配\b中的Tom,请移除Tommy字边界。

注意:如果您还想与Tommy匹配,请将\bTom\b替换为\bTom(?:my)?\b