gpt4 book ai didi

regex - 用于排除标签组或仅匹配标签之间的 (.*) 的正则表达式

转载 作者:行者123 更新时间:2023-12-01 13:36:56 25 4
gpt4 key购买 nike

我现在在这个正则表达式上苦苦挣扎了一段时间。

我需要匹配 <ns3:OutputData> 之间的文本数据</ns3:OutputData> .

  • 注意:ns之后可以是 1 或 2 位数字
  • 注意:数据位于一行,如示例所示
  • 注意:...前面和结尾只是为了提及嵌套了更多标签

到目前为止我的正则表达式:(ns\d\d?:OutputData>)\b(.*)(\/\1)

示例文本:

...<ns3:OutputData>foo bar</ns3:OutputData>...

我已经尝试过(?:(ns\d\d?:OutputData>)\b)(.*)(?:(\/\1))试图排除组 1 和组 3。

我不想排除匹配的标签,如图所示:

非常感谢任何帮助。


编辑

我打算使用正则表达式的 IntelliJ Grep Console 可能存在一些正则表达式解释问题。这是迄今为止最匹配的最新图像...

latest

最佳答案

你的正则表达式就快到了。您需要做的就是使内部匹配器变得非贪婪。 IE。而不是(.*)你可以写(.*?) .

另一个特定于 xml 的替代方案是否定字符类: ([^<]*) .

所以,这是正则表达式:(ns\d\d?:OutputData>)\b(.*?)(\/\1)你可以尝试一下here .

更新

要确保唯一的组是与文本匹配的组,那么您必须使其在没有反向引用的情况下工作:(?:ns\d\d?:OutputData>)\b(.*?)<

更新2

使用lookbehind可以仅匹配所需的部分。检查正则表达式here .:

(?<=ns\d:OutputData>)\b([^<]*)|(?<=ns\d\d:OutputData>)\b([^<]*)

说明:

  • 这两种选择几乎相同。唯一的区别是位数。这很重要,因为某些风格仅支持固定长度的lookbehind。
  • 检查替代方案之一,我们将起始标签放入一个lookbehind (?<=...)所以它不会被包含在完整的比赛中。
  • 然后我们贪婪地匹配每个非 lt 符号:[^<]* 。这将在第一个结束标记处停止。

关于regex - 用于排除标签组或仅匹配标签之间的 (.*) 的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38656635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com