電子書籍の厳選無料作品が豊富!

文字列の中から特定の文字列を抜き出そうとしています。

例)
<TD align=left noWrap bgcolor=#ffffff rowspan=2>AAA</TD>

例の文字列の中からAAAだけを抜き出すにはどのような正規表現を
用いたらよいでしょうか。
御教授下さい。

開発環境:Visual Basic 2005 Express Edition

A 回答 (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

この回答への補足

ここからさらに応用で得られる結果を複数行に表示することはできますでしょうか。


<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

補足日時:2008/09/08 21:34
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/09/08 21:33

目的が


>文字列の中から特定の文字列を抜き出そうとしています。

>どのような正規表現を用いたらよいでしょうか。
が絶対条件でなければ
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.
あまり詳しくないのでいい加減なサンプルです。
それにテーブルが無い場合のエラーチェックもしてないし・・・
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/09/08 21:54

TDタグの中でも拾いたいものと拾いたくないものがあるということでしょうか?


もしそうなら条件を絞り込む記述を加えないといけません。

><TD[^>]*>(.*?)</TD>を参考にしたところ希望の文字列の他に
>別のTDタグの文字列が表示されました。

どういう文字列に対して行ったんでしょうか?
#1の方の回答にあるような .* であれば複数のTDタグ(とその閉じタグのペア)を拾う可能性がありますが、
こちらは .*? としているので閉じタグをさらに超えることはないはずなんですが。

中身は適当でかまわないので、どういうパターンのデータがくるのか例を出してもらえますか?
    • good
    • 0
この回答へのお礼

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

お手数ですが御教授願えますでしょうか。
よろしくお願いします。

お礼日時:2008/09/06 09:53

提示されている前提条件が少ないのでなんともいえないですね。


TDタグの属性は質問にあるものだけなんですか?
また、AAAは固定の文字列じゃないんですよね?

TDタグに囲まれているAAAということなら
<TD[^>]*>([^<]*)</TD>
な感じで取れます。
<TD[^>]*>(.*?)</TD>
でもいいですけど。

この回答への補足

>TDタグの属性は質問にあるものだけなんですか?
いえ、他の属性もあります。
TDタグで属性が違うものが複数行あります。

>また、AAAは固定の文字列じゃないんですよね?
固定の文字列ではありません。

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

補足日時:2008/09/04 10:44
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/09/04 10:43

<TD align=left noWrap bgcolor=#ffffff rowspan=2>(.*)</TD>



こんな感じかな
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/09/04 10:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!