【问题标题】:Notepad++ replace text with RegEx search resultNotepad++ 用 RegEx 搜索结果替换文本
【发布时间】:2016-11-15 17:08:06
【问题描述】:

我想将文件中的标准字符串替换为正则表达式的结果。标准文本如下所示:

<xsl:variable name="ServiceCode" select="###"/>

我想将 ### 替换为服务代码,稍后我可以在同一个文件中通过以下 URL 找到该服务代码:

<a href="/Services/xyz" target="_self">

正则表达式(?&lt;=\/Services\/)(.*)(?=\" ) 返回所需的服务代码“xyz”。

所以,我打开了 Notepad++,在“查找内容”中添加了“###”,在“替换为”部分添加了这个 RegEx,并预计 ### 文本将被 xyz 替换。 但我得到了这个结果:

<xsl:variable name="ServiceCode" select="?<=/Services/.*?=" "/>

我是 RegEx 的新手,我是否需要在替换部分使用与查找字符串不同的语法?有人可以给我一个提示如何达到所需的结果吗?目标是标准化大量具有相似结构的文件,因为现在所有服务代码都在文件的多个位置进行了硬编码。谢谢。

【问题讨论】:

  • 替换模式不接受正则表达式。尝试捕获代码并替换为 bac 引用。类似(\s+name="ServiceCode"\s+select=")###("[\s\S]*?&lt;a\s+href="/Services/)([^"]+) 并替换为$1$3$2$3
  • 您的输入文件是一个 XSL 文档。 either 重写它会更聪明,以便它接受参数,然后在调用它时使用参数(因为这似乎是您在这里尝试的 - 将可变参数值放入 XSL 文件) 您可以使用 XSLT 对其进行转换。这两种方法都比使用正则表达式更好。要选择更好的解决方案,请详细说明上下文。

标签: regex notepad++


【解决方案1】:

您可以将lookahead 用于capturing 前面的部分。

搜索:(?s)###(?=.*/Services/([^"]+)") 并替换为:$1

  • (?s) 使点也匹配换行符(np++ 中还有一个可用的复选框)
  • [^"] 匹配 character that is not "

替换 $1 对应于捕获第一个带括号的子模式。

【讨论】:

  • 谢谢,这就是我要找的。​​span>
【解决方案2】:

我不是 RegEx 方面的专家,但我想我可以提供帮助。看起来你可能会走错路。您使用的正则表达式搜索通常会像这样工作:

RegEx 中的括号() 允许您选择部分搜索并在替换部分中使用它。

您将 (?&lt;=\/Services\/)(.*)(?=\" ) 放入 Notepad++ 的“查找内容”部分。

然后在“替换为”部分中,您可以使用 \1\2\3 将搜索的内容替换为在 (?&lt;=\/Services\/)(.*)(?=\" ) 搜索中找到的内容分别。

根据文件的结构,您需要使用 RegEx 搜索来选择两行代码(以及您需要的特定部分),然后使用 \1\2\3 等的组合来完全替换所有内容是,除了 ### 可以替换为与 xyz 关联的 \number

请参阅http://docs.notepad-plus-plus.org/index.php/Regular_Expressions 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 2017-03-11
    • 1970-01-01
    • 2020-09-14
    • 2016-04-05
    • 1970-01-01
    • 2016-03-07
    相关资源
    最近更新 更多