使用多行和组的正则表达式

本文关键字:正则表达式 | 更新日期: 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的内容。如果可能,这是首选的工作方式,而不是通过使用正则表达式解析它。如不适用,请忽略。