嗨guyes刚才有一个关于在正则表达式中使用多行的快速问题:
正则表达式:
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>.
当一切都在一行上时,这种方法非常有效,但是从另一条线开始,它似乎是跳过它或不将它包含在模式中。
非常感谢任何帮助。
答案 0 :(得分:4)
您还必须使用Singleline选项以及Multiline:
string content = Regex.Match(onix.Substring(startIndex,endIndex - startIndex), @">(.+)<", RegexOptions.Multiline | RegexOptions.Singleline).Groups[1].Value;
但是请自己帮忙并使用正则表达式停止解析XML!请改用XML解析器!
您可以使用XmlDocument类解析XML文本,并使用XPath selectors获取您感兴趣的元素:
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
答案 1 :(得分:2)
RegexOptions.Multiline
只会将^
和$
的含义更改为行的开头/结尾,而不是整个字符串的开头/结尾。
您希望使用RegexOptions.Singleline
,这将导致.
匹配换行符(以及其他所有内容)。
答案 2 :(得分:0)
您可能希望解析可能是XML的内容。如果可能,这是首选的工作方式,而不是使用正则表达式解析它。如果不适用,请忽略。