VB2010にて文字の検索と抽出

このQ&Aのポイント
  • VB2010を使用して、指定の文字列を検索し抽出する方法を教えてください。
  • 特定のHTMLソースコードから、<a></a>タグで囲まれた特定の文字列を抽出する方法を教えてください。
  • WebBrowserコントロールを使用して取得したHTML文書から、特定の文字列を検索して表示する方法を教えてください。
回答を見る
  • ベストアンサー

VB2010にて文字の検索と抽出

下記のようにTextBox1に入力されているとします。 そこで、'<TD><a href="main.py?qtype=userpage&teamnum=162&username=KOTOKO"> KOTOKO </a> </TD>'と書かれた行から、 <a></a>タグで囲まれた' KOTOKO'という文字を検索して、 '<TD> 18 </TD>'と書かれた文字の18と、 <a></a>タグで囲まれた'11346595'と、 <a></a>タグで囲まれた'16184'を取得してMsgBoxに表示したいのですが、 どうすれば出来ますでしょうか? (18、11346595、16184という数字は変動します。) いくら検索しても思うようなものが見つかりませんでした。 因みに、大本のhtmlソースはこちらです。 http://fah-web.stanford.edu/cgi-bin/main.py?qtype=teampage&teamnum=162 ↓これがTextBox1に入力されている値です。 <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=11346595" target="_blank"> 11346595 </a> </TD> <TD><a href="http://fah-web2.stanford.edu/awards/cert.php?u=KOTOKO&pts=16184&t=wus&bg=3" target="_blank"> 16184 </a> </TD> </TR> <TR bgcolor=#dcdcdc> <TD> 19 </TD> <TD><a href="main.py?qtype=userpage&teamnum=162&username=yukichan"> yukichan </a> </TD> <TD><a href="http://fah-web2.stanford.edu/awards/cert.php?u=yukichan&pts=10625127" target="_blank"> 10625127 </a> </TD> <TD><a href="http://fah-web2.stanford.edu/awards/cert.php?u=yukichan&pts=4769&t=wus&bg=3" target="_blank"> 4769 </a> </TD> </TR> ↓これがVBのコード Public Class Form1 Dim url As String Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load url = "http://fah-web.stanford.edu/cgi-bin/main.py?qtype=teampage&teamnum=162" WebBrowser1.Navigate(url) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Form2.Show() Form2.TextBox1.Text = WebBrowser1.Document.Body.OuterHtml Dim r As New System.Text.RegularExpressions.Regex("KOTOKO ", System.Text.RegularExpressions.RegexOptions.IgnoreCase) 'TextBox1.Text内で正規表現と一致する対象を1つ検索 Dim m As System.Text.RegularExpressions.Match = r.Match(Form2.TextBox1.Text) '次のように一致する対象をすべて検索することもできる 'Dim mc As System.Text.RegularExpressions.MatchCollection = _ ' r.Matches(TextBox1.Text) While m.Success '一致した対象が見つかったときキャプチャした部分文字列を表示 MsgBox(m.Value) '次に一致する対象を検索 m = m.NextMatch() End While End Sub End Class

質問者が選んだベストアンサー

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

No1です。 こっちが良いかも? Dim r As New System.Text.RegularExpressions.Regex(">\s[^>]+?\s</(a|TD) ", System.Text.RegularExpressions.RegexOptions.IgnoreCase)

その他の回答 (1)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Dim r As New System.Text.RegularExpressions.Regex(">\s.+?\s</(a|TD) ", System.Text.RegularExpressions.RegexOptions.IgnoreCase) とかかな?

関連するQ&A

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

  • vbのsavefiledialogについて

    vbで、テキストボックスに、文字を入力し、ボタン2をクリックすると、ユーザーが指定したところに、指定した名前で、txt形式、html形式、doc形式(このうち、txtと、htmlは必須。)で保存するプログラムを作りたいと思っております。 サイトを見てみますが、なかなかよいものが見つかりません。どなたか教えてください。 書きかけのプログラムと、フォーム図を載せておきます。 また、変更した方がよければ、そちらもおしえてください。 Public Class Form1 Dim texta As String Dim a Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Button1.Text = "リセット" Button2.Text = "保存" texta = TextBox1.Text End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged texta = TextBox1.Text End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox1.Text = "" End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click a = DialogResult SaveFileDialog1.OverwritePrompt = True SaveFileDialog1.FileName = "" SaveFileDialog1.Filter = "テキストファイル(*.txt)|*.txt|すべてのファイル(*.*)|*.*" a = SaveFileDialog1.ShowDialog If a = Windows.Forms.DialogResult.OK Then Label1.Text = IO.Path.GetDirectoryName(SaveFileDialog1.FileName) Label2.Text = IO.Path.GetFileName(SaveFileDialog1.FileName) Else Label1.Text = "キャンセルされました。" Label2.Text = "" End If End Sub End Class

  • VB(2008)で文字列の置き換え

    Dim a As String Dim b As String a = TextBox1.Text b = a.Replace("hogehoge", "fuga") b = a.Replace("piyo","xyzzy") b = a.Replace("foo", "bar") Textbox2.Text= b のようにしているのですが、置き換えることができません。 初歩的な内容ですがどなたかよろしくお願いします。

  • VBの添削をお願いします。

    VBの添削をお願いします。 先日 http://okwave.jp/qa/q5919602.html で質問した者です。 (textboxの値の倍数が改行されながら表示されるようにするには?という主旨です。) リンク先にもありますが下記の回答をいただきました。 Public Class Form1 Dim a As Integer Dim b As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim b As Integer = 10 a = TextBox1.Text lblMessage.Text = a & ControlChars.CrLf & a + b End Sub End Class それで今度は下記の問いが出ました。 「表示されるのは最新の5行のみ」 Textbox内が10の場合、「60が表示された時点で10は消え、70が出た時点で20が消える」というものです。 このまま続けてもよし、Labelを5つ並べてもよし、とのことです。 で今回は前者で作ってみました。 lblmessage.textの上にlblmessage2.textを被せて隠しちゃえ、というやつなんですが、 模範解答とは程遠いんでしょうね。。。。 どなたか添削お願いできませんか。

  • TextBoxの文字がかけてしまうのですが VB.NET

    VB.NET FrameWork1.1の環境なのですが、 Declare Function WritePrivateProfileString Lib "KERNEL32.DLL" Alias "WritePrivateProfileStringA" ( _ ByVal lpAppName As String, _ ByVal lpKeyName As String, _ ByVal lpString As String, _ ByVal lpFileName As String) As Integer このAPIを使ってファイルに文字列を記録しているのですが、 TextBoxに表示したファイルのフルパスを記録すると このAPIを使った直後にそのTextBoxの文字の後半が欠けてしまいます。 短いパス名なら大丈夫なのですが、長いパス名の場合に欠けてしまいます。 試しに Dim a As String = TextBox1.Text WritePrivateProfileString("TextBox", "1", a, FileName) Console.WriteLine(a) としても同じく欠けてしまいます。 変数aの宣言の型をString ではなく Object にすると 欠けなくなるのですが、変数aやTextBoxの内容は読み取った だけなのになぜ書き換えられてしまうのでしょうか? どの場合でもファイルへの記録は正常に出来ています。 何か問題点などありましたらご教授いただけると助かります。

  • 正規表現で<BR>の行を除外したいです。 VB.NET

    VB.NETで正規表現を使って2つの文字列に囲まれた部分を 取得したいのですが、文字列の先頭と末尾の部分の<BR>の行と 空行を削除したいです。 具体的には対象の文字列が ”ABC <BR> <BR> あいうえお <BR> かきくけこ <BR> さしすせそ <BR> <BR> <BR> XYZ” となっていた場合に ”あいうえお <BR> かきくけこ <BR> さしすせそ” を取得したいです。 現在このようになっています。 Public STR As String Sub Form1_Load Dim sr As New System.IO.StreamReader("c:\0.html", system.Text.Encoding.Default) STR = sr.ReadToEnd TextBox2.Text = "(?<data>.+?)" End Sub Sub Button1_Click  Dim A As String = "ABC"  Dim Z As String = "XYZ"  Label1.Text = A & TextBox2.Text & Z  Dim r As New Regex(Label1.Text, RegexOptions.Singleline)  Dim m As System.Text.RegularExpressions.Match  Try  TextBox1.Text = r.Match(STR).Result("${data}")  Catch ex As Exception  Console.WriteLine("Error")  End Try End Sub <BR>が<br>や<Br><bR>< br >などにも対応したりと 条件がいろいろありすぎて色々試したのですが、 どうしても分かりませんでした。 申し訳ございませんが、お助け頂ければ幸いです。

  • VB添削

    このプログラムは 例えば3 3 4とテキストボックスに数字が打ち込まれると 3×3行列が4個分 のテキストボックスがでてきます。 ここに数字を打ち込んでいき、ボタン2を押すと3×3のテキスト トボックスが出てくると同時に足し算した結果が出てくるようにしたいです。 以下のプログラムはできたところまで作成しています。 どこを直せばよいのでしょうか。 Public Class Form1 Private number As Integer Private rows As Integer Private columns As Integer Private Sub Form11_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For i As Integer = 1 To 3 AddHandler Me.Controls("TextBox" & i).TextChanged, AddressOf TextBox_TextChanged Next End Sub Private Sub TextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) If System.Text.RegularExpressions.Regex.IsMatch(CType(sender, TextBox).Text, "[^0-9]") Then MessageBox.Show("数字で入力してください", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) With CType(sender, TextBox) .Text = .Text.Substring(0, .Text.Length - 1) .SelectionStart = .Text.Length End With End If Dim cnt1 As Integer Dim cnt2 As Integer Dim cnt3 As Integer If Integer.TryParse(TextBox1.Text, cnt1) And Integer.TryParse(TextBox2.Text, cnt2) And Integer.TryParse(TextBox3.Text, cnt3) Then For k = 1 To cnt3 For i = 1 To cnt1 For j = 1 To cnt2 Dim tb As TextBox = New TextBox() tb.Name = "tb" + i.ToString() Me.Controls.Add(tb) tb.Top = (i - 1) * 28 + 55 tb.Left = (j - 1) * 30 + 40 * (cnt2 * (k - 1)) + 10 tb.Width = 25 Next Next Next End If End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Bounds = New Rectangle(10, 10, 1350, 800) Me.AutoScroll = True End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim sum As Double Dim cnt As Integer = 0 For i As Integer = 1 To rows For j As Integer = 1 To columns Dim tb As TextBox = New TextBox() cnt += 1 : If cnt > rows * columns Then cnt = 1 tb.Name = "tb" + cnt.ToString Me.Controls.Add(tb) tb.Top = (i - 1) * 30 + (80 + 40 * rows) tb.Left = (j - 1) * 60 + 10 tb.Width = 40 sum = 0 For k As Integer = 1 To number sum += Double.Parse(CType(Me.Controls("tb" + (cnt + (rows * columns * (k - 1))).ToString()), TextBox).Text) Next tb.Text = sum.ToString() Next Next End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub End Class

  • VB.NET プログラミングの基礎で分らないところを教えてください。

    2つの整数n,m (n>m) を入力し、組み合わせ nCm を表示させるプログラムです。 Private Sub Button1_Click(Byval sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Clieck Dim intN intM, intl As linteger Dim dblComb As Double intN = Textbox1.Text intM = Textbox2.Text dblComb = 1.0 For intl = 1 To intM Next Textbox3.Text = intM End Sub End Class ここまで出来ているんですが、For intl = 1 To intM 以下のプログラムが分りません。どなたか教えてください。。

  • URLをテキストボックスに表示したい vb2008

    Private Sub 移動CB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 移動CB.Click WebBrowser1.Url = New Uri(アドレスTextBox.Text) アドレスTextBox.Text = WebBrowser1.Url End Sub アドレスTextBoxにURLを手動で入力して、移動CBを押すと指定したサイトがWebBrowser1に表示されます。 そこでそのサイト内のURLをクリックしたときに新しいURLをアドレスTextBoxに表示させたいのですがうまくできません。 アドレスTextBox.Text = WebBrowser1.Urlがurlだとビルド失敗になってしまいます。 なので アドレスTextBox.Text = WebBrowser1.Text にしてみたのですがうまくできません。 どうすればいいのでしょうか?よろしくお願いします。

  • VB2010のタブコントロールイベントについて

    表示されているTabPageによって処理を分けたいのですが、以下のコードでうまくいきません。 どう修正したらよろしいでしょうか? 教えてください。お手数をおかけしますがよろしくお願いいたします。 '適用ボタンを押す Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'タイトル(TabPage1) If Me.TabControl1.TabIndex = 1 Then グラフタイトル = Me.TextBox1.Text X軸タイトル = Me.TextBox2.Text Y軸タイトル = Me.TextBox3.Text Call グラフタイトル設定() End If '色と線(TabPage2) If Me.TabControl1.TabIndex = 2 Then 線の太さ = Me.TextBox12.Text Call グラフ線設定() End If '軸(TabPage4) If Me.TabControl1.TabIndex = 4 Then Y軸最小値 = Me.TextBox4.Text Y軸最大値 = Me.TextBox5.Text Y軸目盛間隔 = Me.TextBox6.Text Y軸補助目盛間隔 = Me.TextBox7.Text X軸目盛間隔 = Me.TextBox8.Text X軸ラベル間隔 = Me.TextBox9.Text Call グラフ軸設定() End If End Sub

専門家に質問してみよう