<div> <table border="1" cellpadding="5" cellspacing="0" width="100%" class="list"> <tr> <th rowspan="2">country</th> <th rowspan="2">class<div></div><div></div></th> <th rowspan="2">date</th> <th rowspan="2">no</th> <th rowspan="2">value</th> <th rowspan="2"><div>volume</div><div></div></th> <th rowspan="2">evaluation</th> <th rowspan="2">total</th> <th colspan="2">a</th> </tr> <tr> <th>b</th> <th>c</th> </tr> <tr> <td rowspan="4">JAPAN</td> <td rowspan="2">class1</td> <td> <div>2017/03/29</div> <div>15:36:12</div> </td> <td>10011879</td> <td>18.5121</td> <td><div>1</div><div></div></td> <td><div></div></td> <td><div></div></td> <td>a</td> <td rowspan="2">b</td> </tr> <tr> <td> <div>2017/03/30</div> <div>01:16:01</div> </td> <td>1092115019</td> <td>18.5237</td> <td><div>1</div><div></div></td> <td><div></div></td> <td><div></div></td> <td>c</td> </tr> <tr> <td rowspan="2">class2</td> <td> <div>2017/03/29</div> <div>15:36:24</div> </td> <td>100001894</td> <td>18.5028</td> <td><div>1</div><div></div></td> <td><div></div></td> <td><div></div></td> <td >a</td> <td rowspan="2">c</td> </tr> <tr> <td> <div>2017/03/30</div> <div>01:15:53</div> </td> <td>2115002</td> <td>18.5136</td> <td><div>1</div><div></div></td> <td><div></div></td> <td><div></div></td> <td>b</td> </tr> <tr> <td rowspan="4">HONGKONG</td> <td rowspan="2">class1</td> <td> <div>2017/03/30</div> <div>01:15:47</div> </td> <td>1014990</td> <td>17.3090</td> <td><div>1</div><div></div></td> <td><div></div></td> <td><div></div></td> <td>a</td> <td rowspan="2" >c</td> </tr> <tr> <td> <div>2017/03/29</div> <div>15:36:38</div> </td> <td>1020</td> <td>17.3270</td> <td><div>1</div><div></div></td> <td><div></div></td> <td><div></div></td> <td>b</td> </tr> <tr> <td rowspan="2">class2</td> <td> <div>2017/03/30</div> <div>01:15:35</div> </td> <td>14980</td> <td>17.2909</td> <td><div>1</div><div></div></td> <td><div></div></td> <td><div></div></td> <td>a</td> <td rowspan="2">c</td> </tr> <tr> <td> <div>2017/03/29</div> <div>15:36:47</div> </td> <td>1031</td> <td>17.3083</td> <td><div>1</div><div></div></td> <td><div></div></td> <td><div></div></td> <td>b</td> </tr> </table> </div> </div>
このようなテーブルから正規表現にて各レコードをListにしたいのですが、どうしたらよいでしょうか?
List<List<string>> JAPAN = new List<List<string>>(); JAPAN.Add(new List<string>() { class, date, no, value }); List<List<string>> HONGKONG= new List<List<string>>(); HONGKONG.Add(new List<string>() { class, date, no, value });
country別のListにしたいと考えています。
なぜ正規表現なのですか? DOM や LINQ for XML ではダメなのですか? そのデータは人間が打ち込んだものですか? それとも自動生成されたものですか? 自分で作ったものですか? それとも自分では変更できないものですか?
コードをそのまま質問文に書くと整形が崩れますし、どこまでがコードなのか一目で分かり辛いです。コード前後に『```』という行を入れるように修正してください。
正規表現の理由は現在正規表現で処理していてソース側の変更があったため。また、その他の手段に関しては検討します。今回は自分の正規表現のスキルアップも含め、正規表現で効率のよい書き方とはどういう書き方があるのか多くの方がどのような考え方でされているか参考にしたかったためです。
今、質問に上がっているものから正規表現でデータを取り出すことはできます。しかし、人間が打ち込むものであれば、必ずしも正しいデータとは限らず、今後その正規表現が使えなくなる可能性があります。他者た作ったものなら猶更いつ変更されるものかはわかりません。だから、これら私からの質問は、質問者さんが自ら質問として挙げなけらばならなかった重要な情報です。この回答はここでなく、質問を編集してください。
今後使えなくなるとかそこは今回の件では問題ではありません。今、このテーブルに対しての正規表現を使ってという目的を達成するためにはどうするかが知りたいのであって、今後変更があるかもとかそのようなことは今回の質問には関係ないことなので書きませんでした。
関係ないかどうかは回答者はわかりません。プログラミングするときにはそこまで考えて汎用性をどの程度とるかを決めますので、はっきり書かなければなりません。たとえば、まったく変更がないのであれば、正規表現を使うまでもなく、この元々のデータを破棄してコンバート済みのデータをもっと扱いやすい形で保存するのが最善です。
今回の場合、rowspan の扱いがややこしいので、通常であれば、三段階踏むのが易しいと思います。つまり、country で一段階、class と c で一段階、date から b までで一段階です。しかしそれはデータが変更されるという前提です。変更されないのならば、各 class の要素は 2、各国の要素は 4 と決まっているので、決め打ちで一段階でできます。難易度が全然変わります。
関係ないことまで書いて論点がずれてはこまるので質問に対しての答えをとおもい、あえてこのような質問をしたつもりでしたが、逆に難しくしたのであれば申し訳ありません。実際にはテーブルの仕様としては変更ありませんが、date以降のレコードが増えたり減ったりします。そういった意味で不変ではありません。
どんな変更があり得ますか?
また、data とは何を指しますか?
すいません、誤字です。dataではなくdateです。わかりやすくいえば大項目countyの中項目classで分けられたレコードが状況によって増減します。
つまり、二か国固定、class も二つ固定、class 内のレコード数は不定で最低 0 ということですか?
その通りです
0? 最低 1 ではありませんか?
date以降のレコードは0の場合もありえます
フィールドではなくレコードですね?
常にjapanとclass1があるから0はなりえないとおっしゃりたいのであればその通りです。私は、date以降のレコードはと書いているつもりです
こんかいの解決にそこまで細かい要件が必須なのでしょうか?
このように論点がずれることを恐れて、質問のテーブルに対して最も効率がよい正規表現という技術を身に着けたいと考えたまでで、それ以外の要因等は正規表現以外の要素も含んでくるのでスルーしていただきたかったのですが。
フィールドとレコードの区別はついていますか? 論点は全くずれていません。仕様が決まらなければプログラムは組めません。必要な仕様がきちんと書かれていないのでこのように細かく聞かなければならない事態になっています。
date以降と書いていますが?仕様?最初に提示したテーブルといっています。聞かれたことに答えましたが聞かれた質問があげあしとりのようにしか感じません。明確に言っているつもりです。質問した際のテーブルと
japanやclassはレコードかフィールドかを聞かれているのだと思いますが、その質問だとフィールドではありません。レコードです。
違います。フィールドです。
一応、フィールド固定レコード可変で正規表現を載せましたので、参考になるならどうぞ。
レコードですけど?いいだしたらキリがありませんが、実態はcountryもclassも複数あります。テーブルの仕様上の問題なだけです
いいえ、フィールドです。Japan, Hongkong ならレコードですが、Japan, Class1 はフィールドの列挙です。date もフィールドです。用語が怪しいと仕様は伝わりません。
>フィールドではなくレコードですね?こうあったので認識にズレがあったとおもいますが、私はあくまでレコード単位で話をしていましたjapan単体というとまた語弊があるかもしれませんが、それだけをフォーカスしてフィールドとはという投げかけとは解釈ていおりませんでした。
date 以降という言葉があったので用語を確認しました。date はフィールドの名前であってレコードではありません。今も少し怪しい感じですので、もう一度用語を確認してください。
訂正。date はカラムの名前です。
日本語って難しいですね。それもまたそういう意味で書いたつもりではないのです。