正则表达式从字符串中获取子字符串

时间:2017-01-23 11:23:56

标签: regex string replace notepad++

我正在使用notepad ++并尝试使用特定标记内的另一个单词来查找/替换XML文件中特定单词的出现。

例如: XML文件包含

<alerts>
     <ccEmails>abc@example.com,xyz@example.com</ccEmails>
     <toEmails>mnp@example.com</toEmails>            
</alerts>

我需要将示例替换为<ccEmails>内的 myexample ,但<toEmails>

中的

我在https://regex101.com/r/Q8UB6a/1尝试了ccEmails.*(example).*ccEmails,它只返回最后一次。此外,我无法用另一个替换字符串。

当我在记事本++中尝试这个时,我得到了<ccEmails>

中的所有字符串

enter image description here

你能帮我找到/替换特定标签中包含的子串吗?如果需要更多详细信息,请告诉我。

2 个答案:

答案 0 :(得分:1)

如果您打算使用“查找和替换”对话框,则需要使用基于\G的正则表达式

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

并替换为myexample。查看online regex demo.

<强>详情:

  • (?:<ccEmails>|\G(?!^)) - <ccEmails>或上次成功比赛结束
  • [^<]*? - 尽可能少的<以外的任何0 +字符
  • \K - 省略到目前为止匹配的文字 - \bexample\b - 整个字example

enter image description here

答案 1 :(得分:0)

(<ccEmails>[^<>]+@)example\.替换为\1myexample.并进行全部替换。 replace-all需要完成两次或更多次,因为每次传递只会在所需的字符串中更改一个example