首页 > 解决方案 > 搜索 / 并将其替换为 ; 在带有崇高文本的 xml 标记中 3

问题描述

我正在处理一个带有这个标签的 .xml 文件

<Categories><![CDATA[Test/Test1-Test2-Test3|Test4/Test5-Test6|Test7/Test8]]></Categories>

我正在尝试通过在Sublime Text 3中使用正则表达式来/替换。;

输出应该是

<Categories><![CDATA[Test;Test1-Test2-Test3|Test4;Test5-Test6|Test7;Test8]]></Categories>

当我使用它时(<Categories>\S+)\/(.+</Categories>),它匹配所有行,当然,如果我使用\/它,它匹配/.xml 文件中的所有位置。

能否请你帮忙?

标签: regexsublimetext3pcre

解决方案


对于您的示例字符串,您可以使用 a\G来断言上一个匹配结束时的位置,并使用\K忘记已经匹配的内容,然后匹配正斜杠。

在更换使用;

使用积极的前瞻来断言右边的内容是]]></Categories>

(?:<Categories><!\[CDATA\[|\G(?!^))[^/]*\K/(?=[^][]*]]></Categories>)

解释

  • (?:非捕获组
    • <Categories><!\[CDATA\[匹配<Categories><![CDATA[
    • |或者
    • \G(?!^)在上一场比赛结束时断言位置,而不是在开始时
  • )关闭非捕获组
  • [^/]*/不使用否定字符类匹配 0+ 次
  • \K/忘记匹配的内容,然后匹配/
  • (?=正向前瞻,断言右边是
    • [^][]*]]></Categories>匹配 0+ 次 not [or ],然后匹配]]></Categories>
  • )关闭正向前瞻

正则表达式演示


推荐阅读