- - PR -
正規表現によるタグの抽出
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-04-20 15:00
質問する場所が違うかもしれませんが、正規表現についてお尋ねします。
VB.NETにて、Windowsアプリケーションの開発を行っています。 タグの入ったテキストファイルを読み込んで、Regexを使って必要なタグの部分だけを抽出し、整形したいと考えています。具体的に以下の例でいうと、<Point>から</Point>の間をそのまま抽出するという感じです。 <Point> <Point ID="1"/> <Point ID="2"/> </Point> 現在のところ、<Point>以下の1行までは抽出できたのですが、複数行を抽出する部分で苦戦しております。なにかアドバイスやヒント等ありましたらご教授のほどよろしくお願いします。 | ||||||||||||
|
投稿日時: 2005-04-20 15:37
RegexOptions.Singleline辺りがお望みのものでしょうか。
| ||||||||||||
|
投稿日時: 2005-04-20 16:04
もしそれが XML 文書なら、XmlDocument クラスや XmlReader クラスを使った方が良いです。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||||||||||
|
投稿日時: 2005-04-20 16:33
早速のご返事ありがとうございます。
はじめはXmlDocumentクラスを使用してみましたが、要素が取得できずにエラーになってしまった経緯があります。話が少々ややこしいのですが、そのファイルは完全なXML文章ではなく、XMLをベースにした独自のもので、例えば、タグの中にそのままいくつもデータが入っているものや、タグをはさんだ中にデータが入っているものが混在しているような感じです。 例: <KEY ID="1" Field="1" Mode="0" />の場合や、 <POS> 0,16,18,0 </POS> の場合が混在している。 単純に、<>〜</>の中身を取得できないかと考え、正規表現を使用して抽出をしようと思いました。 | ||||||||||||
|
投稿日時: 2005-04-20 17:04
XML 仕様を外れた文書ファイルは、XmlDocument.Load() の時点でエラーが発生します。 文書の読み込みでなく、取得でエラーになったなら、取得の手順がまずかっただけなんじゃないでしょうか?
それだけなら特に問題ないです。XML 仕様の範疇で表現可能です。
XML 文書よりもルーズな仕様のファイルを相手にする場合、正規表現では表せないようなケースもあり得るので、ご注意を。(例:汚い HTML) _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://www.hidori.jp/ // Microsoft MVP for Visual C# [ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2005-04-20 17:05 ] | ||||||||||||
|
投稿日時: 2005-04-20 17:46
渋木さま、わざわざありがとうございます。
XmlDocumentクラスをもう少し調べて、もう一度やってみたいと思います。 | ||||||||||||
|
投稿日時: 2005-04-20 18:20
どういう XML 文書中の、どの部分のデータを抽出したいのかを示してもらえれば、コメントし易いです。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||||||||||
|
投稿日時: 2005-04-21 10:01
たびたびすみません。
元となるXML文章というのは、地図データをXMLを基準に変換した独自フォーマット(G-XMLというわけでもないようです)で、一部はこんな感じです。 <CoordInfo> <RectQP>-3000,-37900,-1050,-33800</RectQP> <RectResolution>1000</RectResolution> <RectKei>9</RectKei> </CoordInfo> <Pnts> <Pnt ID="1" Flag="00000000" P="3740800,150700,0"/> <Pnt ID="2" Flag="00000000" P="3744200,53300,0"/> </Pnts> この部分では、 <CoordInfo> <RectQP>-3000,-37900,-1050,-33800</RectQP> </CoordInfo> <Pnts> <Pnt ID="1" Flag="00000000" P="3740800,150700,0"/> <Pnt ID="2" Flag="00000000" P="3744200,53300,0"/> </Pnts> と、このような感じで整形したいと考えています。 |
1