gpt4 book ai didi

c# - 正则表达式包含在 XML 元素中

转载 作者:行者123 更新时间:2023-11-30 21:40:41 25 4
gpt4 key购买 nike

如何在正则表达式中使用“包含”(“包含”或“%like%”)?

我有一个正则表达式来匹配 XML 节点和准确的文本:

<([\w]+)[^>]*>sample<\/\1>

它会生成准确的节点名称,但我想像在 C# 和 SQL 中那样应用正则表达式 (%LIKE%)。

文本:

    <Part>this is sample part</Part>
<Remarks>this is sample remark</Remarks>
<Notes>this is sample notes</Notes>
<Desc>sample</Desc>

预期的正则表达式结果应返回上述所有节点,但目前它只返回最后一个节点。

我创建了 a sample here to test .

最佳答案

您可以使用 XDocument像这样解析 XML:

var s = @"<?xml version=""1.0""?>
<root>
<Part>this is sample part</Part>
<Remarks>this is sample remark</Remarks>
<Notes>this is sample notes</Notes>
<Desc>sample</Desc>
</root>";
var document = XDocument.Parse(s);
var names = document.Descendants()
.Elements()
.Where(x => x.Value.Contains("sample")) // all nodes with text having sample
.Select(a => a.Name.LocalName); // return the local names of the nodes
Console.WriteLine(string.Join("\n", names));

它打印:

enter image description here

同样可以用 XPath 实现:

var names2 = document.Root.XPathSelectElements("//*[contains(text(), \"sample\")]");
var results = names2.Select(x => x.Name.LocalName));

如果 XML 无效,要回退到正则表达式,请使用

<(?:\w+:)?(\w+)[^<]*>[^<]*?sample[^<]*</(?:\w+:)?\1>

参见 regex demo .注意 (?:\w+:)?匹配打开和关闭标记节点中的任意命名空间。 [^<]匹配除 < 以外的任何字符,所以它不会溢出到下一个节点。

关于c# - 正则表达式包含在 XML 元素中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44387603/

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