• 締切済み

VB2005の正規表現について

文字列の中から特定の文字列を抜き出そうとしています。 例) <TD align=left noWrap bgcolor=#ffffff rowspan=2>AAA</TD> 例の文字列の中からAAAだけを抜き出すにはどのような正規表現を 用いたらよいでしょうか。 御教授下さい。 開発環境:Visual Basic 2005 Express Edition

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.5

vbはよくわからんので、コレクションとか使えばもっとすっきりできるでしょうけど こんなんですか imports System imports System.Text.RegularExpressions Imports Microsoft.VisualBasic Module OKWave public sub Main () dim rx as Regex = new Regex("<TD[^>]*>(.*?)</TD>", _ RegexOptions.Compiled Or RegexOptions.IgnoreCase) dim text as string = "<TD align=left noWrap bgcolor=#ffffff rowspan=2>AAA</TD>" & vbCrLf & _ "<TD align=left noWrap bgcolor=#ffffff rowspan=1>BBB</TD>" & vbCrLf & _ "<TD align=left noWrap bgcolor=#ffffff rowspan=1>CCC</TD>" & vbCrLf dim matches as MatchCollection = rx.Matches(text) Console.WriteLine("{0} matches found.", matches.Count) dim maxindex as integer = matches.count dim elements(maxindex-1) as string dim m as Match dim i as integer = 0 for each m in matches dim word as string = m.Groups(1).Value 'Console.WriteLine("{0}", word) elements(i) = word i = i+1 next dim result as string result = join(elements, ", ") Console.WriteLine("result = {0}", result) end sub End Module 3 matches found. result = AAA, BBB, CCC

yasu-jda
質問者

お礼

回答ありがとうございます。 ソースを利用して希望の結果が得られました。 何度もありがとうございます。

yasu-jda
質問者

補足

ここからさらに応用で得られる結果を複数行に表示することはできますでしょうか。 例 <TD align=left noWrap bgcolor=#ffffff rowspan=2>AAA</TD> <TD align=left noWrap bgcolor=#ffffff rowspan=1>BBB</TD> <TD align=left noWrap bgcolor=#ffffff rowspan=1>CCC</TD> <TD align=left noWrap bgcolor=#ffffff rowspan=2>DDD</TD> <TD align=left noWrap bgcolor=#ffffff rowspan=1>EEE</TD> <TD align=left noWrap bgcolor=#ffffff rowspan=1>FFF</TD> <TD align=left noWrap bgcolor=#ffffff rowspan=2>GGG</TD> <TD align=left noWrap bgcolor=#ffffff rowspan=1>HHH</TD> <TD align=left noWrap bgcolor=#ffffff rowspan=1>III</TD> result=AAA,BBB,CCC,DDD,EEE,FFF,GGG,HHH,III ↓ result1=AAA,BBB,CCC result2=DDD,EEE,FFF result3=GGG,HHH,III

  • hotosys
  • ベストアンサー率67% (97/143)
回答No.4

目的が >文字列の中から特定の文字列を抜き出そうとしています。 で >どのような正規表現を用いたらよいでしょうか。 が絶対条件でなければ Private Sub sample() Dim wb As New WebBrowser wb.Navigate("http://blog.goo.ne.jp/") Do While wb.ReadyState <> WebBrowserReadyState.Complete Application.DoEvents() Loop For i As Integer = 0 To wb.Document.GetElementsByTagName("table").Item(0).GetElementsByTagName("td").Count - 1 MsgBox(wb.Document.GetElementsByTagName("table").Item(0).GetElementsByTagName("td").Item(i).InnerText) Next End Sub みたいにdom(というのか)htmlやxmlを解析する機能を持つオブジェクト使うと楽ですよ。 入れ子のtable(tableの中にtableがある)みたいのがあると正規表現で調べるの大変ですよ。 p.s. あまり詳しくないのでいい加減なサンプルです。 それにテーブルが無い場合のエラーチェックもしてないし・・・

yasu-jda
質問者

お礼

回答ありがとうございます。 DOM関数を知りませんでしたので勉強になりました。 今回VBでWebを扱わないので使えるかどうかわかりませんが 非常に参考になりました。 hotosysさんありがとうございます。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

TDタグの中でも拾いたいものと拾いたくないものがあるということでしょうか? もしそうなら条件を絞り込む記述を加えないといけません。 ><TD[^>]*>(.*?)</TD>を参考にしたところ希望の文字列の他に >別のTDタグの文字列が表示されました。 どういう文字列に対して行ったんでしょうか? #1の方の回答にあるような .* であれば複数のTDタグ(とその閉じタグのペア)を拾う可能性がありますが、 こちらは .*? としているので閉じタグをさらに超えることはないはずなんですが。 中身は適当でかまわないので、どういうパターンのデータがくるのか例を出してもらえますか?

yasu-jda
質問者

お礼

sakusaker7さん、回答ありがとうございます。 >こちらは .*? としているので閉じタグをさらに超えることはないはずなんですが。 私の勘違いでした。 For文で結果の表示を繰り返していたので複数表示されていただけでした。 申し訳ありません。 >TDタグの中でも拾いたいものと拾いたくないものがあるということでしょうか? はい、その通りです。 アドバイスをヒントに<TD[^>]*(条件)>(.*?)</TD>としてみたところ、希望の文字列が拾えました。 ありがとうございました。 さらに質問なんですが、複数行のTDタグのTDタグにはさまれている文字列を拾い、 1つの行に表示するにはどうしたらよいでしょうか。 例) <TD align=left noWrap bgcolor=#ffffff rowspan=2>AAA</TD> <TD align=left noWrap bgcolor=#ffffff rowspan=1>BBB</TD> <TD align=left noWrap bgcolor=#ffffff rowspan=1>CCC</TD>  ↓ AAA,BBB,CCC お手数ですが御教授願えますでしょうか。 よろしくお願いします。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

提示されている前提条件が少ないのでなんともいえないですね。 TDタグの属性は質問にあるものだけなんですか? また、AAAは固定の文字列じゃないんですよね? TDタグに囲まれているAAAということなら <TD[^>]*>([^<]*)</TD> な感じで取れます。 <TD[^>]*>(.*?)</TD> でもいいですけど。

yasu-jda
質問者

お礼

回答ありがとうございます。

yasu-jda
質問者

補足

>TDタグの属性は質問にあるものだけなんですか? いえ、他の属性もあります。 TDタグで属性が違うものが複数行あります。 >また、AAAは固定の文字列じゃないんですよね? 固定の文字列ではありません。 <TD[^>]*>(.*?)</TD>を参考にしたところ希望の文字列の他に 別のTDタグの文字列が表示されました。 私は最終的に、複数行のTDタグに囲まれたそれぞれの文字列を カンマで区切って表示したいと考えています。 最初に提示した前提条件が少なすぎて申し訳ありませんでした。

  • mo_gu
  • ベストアンサー率51% (56/109)
回答No.1

<TD align=left noWrap bgcolor=#ffffff rowspan=2>(.*)</TD> こんな感じかな

yasu-jda
質問者

お礼

回答ありがとうございます。

関連するQ&A

  • VB2005での正規表現

     文字列から特定の条件をみたす単語を探す処理をしたいのですが。正規表現という言葉まではたどり着きましたが。まだ初めて間もないため私のレベルでは使い方がわかりません。すいませんが教えてもらえないでしょうか? 開発環境:Visual Basic 2005 Express Edition 例。PRINTERNAMEから始まりPORTNAMEまでの中の文字列を拾いたいのですが。PRINTERNAME**PORTNAME の**部分の文字列を抜き出したいのです。 すいませんがよろしくお願いいたします。

  • HTMLから正規表現で必要な情報を取得したい

    以下のようなHTMLがあり、PHPで正規表現を使い(A)~(J)の値を取得したいのですが、 どのような正規表現を書けば取得できるか迷っています。 正規表現でなくとも取得できる方法があればご教示ください。 どうかお願いいたします。 ※ちなみにPHP5です。 ---------------------------------------------------------- ~省略~ <tr bgcolor="#ffffff"> <td align="center">(A)<br></td> <td align="center">(B)<br></td> <td align="center">(C)<br></td> <td><a href="http://aaaaa.co.jp">(D)</a><br></td> <td align="right">(E)</td> <td align="right">(F)<br></td> <td align="right">(G)</td> <td align="right">(H)</td> <td align="right">(I)</td> <td align="center" nowrap><font color="#FFFFFF">(J)</font></td> </tr> ~省略~

    • ベストアンサー
    • PHP
  • Mac IEのバグなのでしょうか?

    TMEspionです。 <table border="0" cellpadding="5" cellspacing="5"><tr><td width="100" align="left" bgcolor="#999999"><table width="50" border="0" cellpadding="5" cellspacing="5"><tr><td align="left" bgcolor="#FFFFFF">左</td></tr><tr><td align="center" bgcolor="#FFFFFF">中</td></tr><tr><td align="right" bgcolor="#FFFFFF">右</td></tr></table></td><td width="100" align="center" bgcolor="#999999"><table width="50" border="0" cellpadding="5" cellspacing="5"><tr><td align="left" bgcolor="#FFFFFF">左</td></tr><tr><td align="center" bgcolor="#FFFFFF">中</td></tr><tr><td align="right" bgcolor="#FFFFFF">右</td></tr></table></td><td width="100" align="right" bgcolor="#999999"><table width="50" border="0" cellpadding="5" cellspacing="5"><tr><td align="left" bgcolor="#FFFFFF">左</td></tr><tr><td align="center" bgcolor="#FFFFFF">中</td></tr><tr><td align="right" bgcolor="#FFFFFF">右</td></tr></table></td></tr><tr><td align="left" bgcolor="#999999">左</td><td align="center" bgcolor="#999999">中</td><td align="right" bgcolor="#999999">右</td></tr></table> --------------------------------- 上記のソースの様に、テーブルを縦2段、横2列にセルを作り、上段はテーブルタグ、下段はテキストでそれぞれalign属性をleft、center,rightと設定しています。 ところがInternet Explorer 5.2 for Macで見ると、 上段右のテーブルタグは「align="right"」の効果が出ていません。 この質問を呼んでいる回答者様には、ブラウザでどう表示されるんでしょうか? どう表示されたかという結果とブラウザ名を教えて下さい。

    • ベストアンサー
    • HTML
  • HTMLタグだけにマッチする正規表現を知りたい

    <td align="right" nowrap>12,345</td><td align="right" nowrap>234,567</td><td align="right" nowrap>456,789</td> といったHTML文から正規表現で数字の部分だけ抜き出して、配列に格納したいのです。 イメージとしては $matchs[0] = 12,345 $matchs[1] = 234,567 $matchs[2] = 456,789 となります。 当方で、書籍を参考に preg_match("/<td align=\"right\" nowrap>/i", $line); と正規表現を書いてみたのですが全然ヒットしません。 正しい書き方があるのでしょうか?

    • ベストアンサー
    • PHP
  • VBで正規表現

    VBで正規表現 下記のような文字列がTextBoxに入力されています。 <a></a>で囲まれた部分の抽出は出来ましたが、 <td></td>タグで囲まれた’18’も取り出したいのですが正規表現ではどの様に記述すれば宜しいでしょうか? 関係有りそうなコードはこれです。 Regex("<a href=""(?<url>.*?)"".*?>(?<text>.*?)</a>" ---------------------------------------- <TR bgcolor=#ffffff> <TD> 18 </TD> <TD><a href="main.py?qtype=userpage&teamnum=162&username=KOTOKO"> KOTOKO </a> </TD> <TD><a href="http://fah-web2.stanford.edu/awards/cert.php?u=KOTOKO&pts=11379753" target="_blank"> 11379753 </a> </TD> <TD><a href="http://fah-web2.stanford.edu/awards/cert.php?u=KOTOKO&pts=16190&t=wus&bg=3" target="_blank"> 16190 </a> </TD> </TR> ----------------------------------------

  • 正規表現について

    正規表現を使用して文字列の置換(ereg_replace)をしたいと思うのですが、 うまくいかず悩んでおります。。 以下の文字列があったとします。 【AAA】【BBB】【CCC】DDD 文字列の中から先頭から始まる【】でくくられたものだけ(【AAA】)だけ削除して、 結果を【BBB】【CCC】DDDとしたいのですが、正規表現でどのようにヒットさせればよいのか分りません。 ※【】の中にくる文字はAAAとは限りません。 お手数ですがご教授頂けますでしょうか。

    • ベストアンサー
    • PHP
  • テーブルの位置指定について

    html編集で困っています。 <TABLE cellpadding="0" border="3" bordercolor="black" style="float:left;"> <TR> <TD rowspan="3" valign="bottom" align="center" width="76" height="75" background="background.jpg"></font></TD> <TD rowspan="2" valign="bottom" align="left" width="95" height="25"><font face="" color="#ffffff" size="1"></font></TD> <TD rowspan="2" valign="bottom" align="left" width="50" height="25"><font face="" color="#ffffff" size="2"></font></TD> <TD rowspan="2" valign="bottom" align="left" width="40" height="25"><font face="" color="#ffffff" size="1"></font></TD> </TR> </TABLE> というようにテーブルを組みました。 このテーブル全体を、ページ全体の中で、 左右では左寄せ、上下では中央 に配置するにはどうすればいいのでしょうか。 パソコンの画面の大きさの違いでデザインが崩れてしまうので、上のような形に配置できればとてもうれしいです。 ご教授よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • モバイルで表示するゴルフスコアのデザイン

    お世話になっております、めぐみと申します。 4.7インチ程度のモバイル画面にかっこいいゴルフスコアが表示できないか悩んでいます。 自分で作っては見たもののあまりよくないです。 あまり、データを大きくしたくないので極力gif等使用したくはないですが、多少なら使ってもよいかと思っています。 色合いがきれいで、丸みとかあったほうがいいのかと考えてはいるのですが。。。 もし、何か良いアイデアがありましたらどんな些細なことでも結構ですのでアドバイス頂けないものでしょうか。 以下、HTMLを貼り付けます。 <!doctype html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <table border="1"> <tbody> <tr> <td bgcolor="#4C6E29" style="color: #FFFFFF">日付</td> <td colspan="11" bgcolor="#4C6E29" style="color: #FFFFFF">2018.02.19</td> </tr> <tr> <td rowspan="2" bgcolor="#4C6E29" style="color: #FFFFFF">場所</td> <td colspan="11" bgcolor="#4C6E29" style="color: #FFFFFF">〇〇ゴルフ場In</td> </tr> <tr> <td colspan="11" bgcolor="#4C6E29" style="color: #FFFFFF">〇〇ゴルフ場Out</td> </tr> <tr> <td rowspan="4" bgcolor="#4C6E29">&nbsp;</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">1</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">2</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">3</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">4</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">5</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">6</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">7</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">8</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">9</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">小計</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">実績合計</td> </tr> <tr> <td align="center" valign="middle" bgcolor="#98A51C">-1</td> <td align="center" valign="middle" bgcolor="#98A51C">1</td> <td align="center" valign="middle" bgcolor="#98A51C">0</td> <td align="center" valign="middle" bgcolor="#98A51C">0</td> <td align="center" valign="middle" bgcolor="#98A51C">1</td> <td align="center" valign="middle" bgcolor="#98A51C">-2</td> <td align="center" valign="middle" bgcolor="#98A51C">0</td> <td align="center" valign="middle" bgcolor="#98A51C">2</td> <td align="center" valign="middle" bgcolor="#98A51C">0</td> <td align="center" valign="middle" bgcolor="#98A51C">1</td> <td align="center" valign="middle" bgcolor="#98A51C">+15</td> </tr> <tr> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">10</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">11</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">12</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">13</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">14</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">15</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">16</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">17</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">18</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">小計</td> <td align="center" valign="middle" bgcolor="#4C6E29" style="color: #FFFFFF">打数合計</td> </tr> <tr> <td align="center" valign="middle" bgcolor="#98A51C">2</td> <td align="center" valign="middle" bgcolor="#98A51C">1</td> <td align="center" valign="middle" bgcolor="#98A51C">-1</td> <td align="center" valign="middle" bgcolor="#98A51C">1</td> <td align="center" valign="middle" bgcolor="#98A51C">2</td> <td align="center" valign="middle" bgcolor="#98

  • テーブルが崩れる問題について

    このような場合赤色の部分が17:00の真中に来るようにするにはどうしたらいいんでしょうか? <table height="15%" border="0" cellpadding="5" cellspacing="1" bgcolor="#CCCCCC"> <tr> <td height="33%">&nbsp;</td> <td colspan="2" align="center">10:00</td> <td colspan="2" align="center">11:00</td> <td colspan="2" align="center">12:00</td> <td colspan="2" align="center">13:00</td> <td colspan="2" align="center">14:00</td> <td colspan="2" align="center">15:00</td> <td colspan="2" align="center">16:00</td> <td colspan="2" align="center">17:00</td> <td colspan="2" align="center">18:00</td> <td colspan="2" align="center">19:00</td> <td colspan="2" align="center">20:00</td> </tr> <tr> <td height="33%" bgcolor="#FFFFFF">27日</td> <td bgcolor="#FFFFFF">&nbsp;</td> <td bgcolor="#FFFFFF">&nbsp;</td> <td bgcolor="#FFFFFF">&nbsp;</td> <td bgcolor="#FFFFFF">&nbsp;</td> <td bgcolor="#FFFFFF">&nbsp;</td> <td bgcolor="#FFFFFF">&nbsp;</td> <td colspan="9" bgcolor="#FF0000">&nbsp;</td> <td bgcolor="#FFFFFF">&nbsp;</td> <td bgcolor="#FFFFFF">&nbsp;</td> <td bgcolor="#FFFFFF">&nbsp;</td> <td bgcolor="#FFFFFF">&nbsp;</td> <td bgcolor="#FFFFFF">&nbsp;</td> <td bgcolor="#FFFFFF">&nbsp;</td> <td bgcolor="#FFFFFF">&nbsp;</td> </tr> </table>

    • ベストアンサー
    • HTML
  • 1ページにテーブルを複数設定・一括変更の方法について

    一つのページに複数(十数個)を設置する場合 まとめて設置する方法はあるのでしょうか? また、サイズ等を変更したい場合も 一括して変更する方法はあるのでしょうか? 例えば、以下の物を数十個設置する場合 設置自体は簡単なのですが、変更が・・、 どうにか簡単にできる方法があればご教授下さい。 <center> <table border="0" width="600" cellspacing="1" bgcolor="#0fb1ff" height="200"> <tbody> <tr> <td colspan="2" width="600" bgcolor="#ffffff" height="20" align="center"></td> </tr> <tr> <td width="200" bgcolor="#ffffff" height="100" align="center"></td> <td width="400" bgcolor="#ffffff" height="100"></td> </tr> <tr> <td width="200" bgcolor="#ffffff" height="20" align="center"></td> <td width="400" bgcolor="#ffffff" height="20"></td> </tr> <tr> <td width="200" bgcolor="#ffffff" height="20" align="center"></td> <td width="400" bgcolor="#ffffff" height="20"></td> </tr> <tr> <td width="200" height="20" bgcolor="#ffffff" align="center"></td> <td width="400" height="20" bgcolor="#ffffff"></td> </tr> <tr> <td width="200" bgcolor="#ffffff" height="20" align="center"></td> <td width="400" bgcolor="#ffffff" height="20"></td> </tr> </tbody> </table> </center> 宜しくお願いします。

    • ベストアンサー
    • HTML

専門家に質問してみよう