使用多行和组的正则表达式
本文关键字:正则表达式 | 更新日期: 2023-09-27 18:03:35
大家好,我有一个关于在正则表达式中使用多行的快速问题:
正则表达式:
string content = Regex.Match(onix.Substring(startIndex,endIndex - startIndex), @">(.+)<", RegexOptions.Multiline).Groups[1].Value;
这是我正在读取的文本字符串:
<Title>
<TitleType>01</TitleType>
<TitleText textcase="02">18th Century Embroidery Techniques</TitleText>
</Title>
这是我得到的:
01
我想要的是
<Title> and </Title>.
当所有内容都在一行上,但由于从另一行开始,它似乎会跳过它或不包括它到模式中时,此操作非常有效。
感谢您的帮助
您还必须使用单行选项,以及Multiline:
string content = Regex.Match(onix.Substring(startIndex,endIndex - startIndex), @">(.+)<", RegexOptions.Multiline | RegexOptions.Singleline).Groups[1].Value;
但是帮你自己一个忙,停止使用正则表达式解析XML !使用XML解析器代替!
可以使用XmlDocument类解析XML文本,并使用XPath选择器找到感兴趣的元素:
XmlDocument doc = new XmlDocument();
doc.LoadXml(...); // your load the Xml text
XmlNode root = doc.SelectSingleNode("Title"); // this selects the <Title>..</Title> element
// modify the selector depending on your outer XML
Console.WriteLine(root.InnerXml); // displays the contents of the selected node
RegexOptions.Multiline
只会将^
和$
的含义更改为行首/行尾,而不是整个字符串的首/行尾。
您想使用RegexOptions.Singleline
代替,这将导致.
匹配换行符(以及其他所有内容)。
您可能希望解析可能是XML的内容。如果可能,这是首选的工作方式,而不是通过使用正则表达式解析它。如不适用,请忽略。