1

こんにちはみんな、正規表現で複数行を使用することについて簡単な質問がありました:

正規表現:

 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>.

これは、すべてが1行にある場合は完全に機能しますが、別の行から始まるため、スキップしているか、パターンに含まれていないようです。

どんな援助も大歓迎です。

4

3 に答える 3

4

マルチラインとともに、シングルラインオプションも使用する必要があります。

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
于 2013-03-11T18:58:11.573 に答える
2

RegexOptions.Multiline文字列全体の開始/終了ではなく、行の開始/終了の意味とを変更するだけ^です。$

代わりに使用する必要がありますRegexOptions.Singleline。これにより、.一致の改行(およびその他すべて)が発生します。

于 2013-03-11T18:58:45.837 に答える
0

代わりに、おそらくXMLを解析することをお勧めします。可能であれば、これは正規表現を使用して解析するのではなく、推奨される作業方法です。該当しない場合は無視してください。

于 2013-03-11T18:57:53.693 に答える