【问题标题】:Regular Expression to Find Something Until String in Notepad++正则表达式在 Notepad++ 中查找直到字符串的内容
【发布时间】:2017-08-02 19:47:23
【问题描述】:

我正在尝试找到一种在 Notepad++ 中查找和替换的方法,但我不知道如何执行允许我这样做的正则表达式。我需要找到所有的

<Element
          Attribute1="<!--Any one letter-->34_<!--Anything-->"
          <!--Multiple Attributes on multiple lines-->
          <!--Until-->
          AttributeToMatch="Value"
          <!--Multiple Attributes on multiple lines--> />

我想要以下:

<Element
          Attribute1="<!--Any one letter-->34_<!--Anything-->"
          <!--Multiple Attributes on multiple lines-->
          <!--Until-->
          AttributeToMatch="NewValue"
          <!--Multiple Attributes on multiple lines--> />

我需要能够将数百个元素的“SpecificValue”只替换为另一个值,因此我想找到一种方法来更快、更有效地完成它,而不是手动完成。

到目前为止,我想出了:

Attribute1="[A-Z]{1}34_.*(\r|\n)(\s)*.*(\r|\n)(\s)AttributeToMatch="SpecificValue"

哪个不起作用(没有找到),我不明白为什么。 谢谢

【问题讨论】:

  • 好的,所以最简便的方法是大后瞻和前瞻,例如:(?)。试试看。编辑:不,抱歉,lookbehind 可能无效。
  • 我知道这很痛苦,但是既然您仍然在使用 XML,为什么不编写一个快速脚本来解析它、更新它,然后再次将其输出为 XML?
  • @struthersneil 确实无效...您建议用什么语言编写脚本?
  • 我会用你喜欢的任何东西。蟒蛇,红宝石也许。任何具有易于使用的 XML 库的东西。但可能有 is 一个正则表达式解决方案。我要在这里修补一下。
  • 感谢您的修补!我会研究一下 python 替代方案,我还没有玩过 XML 解析,所以我会看看我能做什么!

标签: regex xml notepad++


【解决方案1】:

好吧,我还没有专门在 Notepad++ 中尝试过,但请尝试一下。

/\<Element[\S\s]*Attribute1\=\".*34_.*\"[\S\s]*AttributeToMatch\=\"([^\"]*)\"[\S\s]*\/\>[\S\s]*(?=\<Element)/igm

igm 只是表示它应该不区分大小写、全局和多行的符号。可能为 Notepad++ 去掉它。

您还需要能够将捕获组 $1 替换为您的新值。同样,我不确定它在 Notepad++ 中是如何工作的。

[\S\s]* 组匹配任何内容,包括换行符。

最后,它避免了一次捕获多个元素,并提前查找&lt;Element。如果 Notepad++ 支持,它也可以匹配文件的结尾,或者添加一个假的

(我的直觉仍然是,您只需解析 XML 并以这种方式进行更改,就会更轻松。)

【讨论】:

  • 再次感谢您,但它在 Notepad++ 中不起作用。事实上,它会导致崩溃! ^^'' 我正在使用 Python 脚本来解析 XML 文件,我将使用正则表达式过滤掉具有匹配 Attribute1 的元素,而不是将 AttributeToMatch 的值更改为我想要的值。完成后我会发布我是如何做到的!
猜你喜欢
  • 1970-01-01
  • 2016-01-23
  • 2011-09-15
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多