![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
A 回答 (5件)
- 最新から表示
- 回答順に表示
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
この回答への補足
ここからさらに応用で得られる結果を複数行に表示することはできますでしょうか。
例
<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
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.
あまり詳しくないのでいい加減なサンプルです。
それにテーブルが無い場合のエラーチェックもしてないし・・・
回答ありがとうございます。
DOM関数を知りませんでしたので勉強になりました。
今回VBでWebを扱わないので使えるかどうかわかりませんが
非常に参考になりました。
hotosysさんありがとうございます。
No.3
- 回答日時:
TDタグの中でも拾いたいものと拾いたくないものがあるということでしょうか?
もしそうなら条件を絞り込む記述を加えないといけません。
><TD[^>]*>(.*?)</TD>を参考にしたところ希望の文字列の他に
>別のTDタグの文字列が表示されました。
どういう文字列に対して行ったんでしょうか?
#1の方の回答にあるような .* であれば複数のTDタグ(とその閉じタグのペア)を拾う可能性がありますが、
こちらは .*? としているので閉じタグをさらに超えることはないはずなんですが。
中身は適当でかまわないので、どういうパターンのデータがくるのか例を出してもらえますか?
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
お手数ですが御教授願えますでしょうか。
よろしくお願いします。
No.2
- 回答日時:
提示されている前提条件が少ないのでなんともいえないですね。
TDタグの属性は質問にあるものだけなんですか?
また、AAAは固定の文字列じゃないんですよね?
TDタグに囲まれているAAAということなら
<TD[^>]*>([^<]*)</TD>
な感じで取れます。
<TD[^>]*>(.*?)</TD>
でもいいですけど。
この回答への補足
>TDタグの属性は質問にあるものだけなんですか?
いえ、他の属性もあります。
TDタグで属性が違うものが複数行あります。
>また、AAAは固定の文字列じゃないんですよね?
固定の文字列ではありません。
<TD[^>]*>(.*?)</TD>を参考にしたところ希望の文字列の他に
別のTDタグの文字列が表示されました。
私は最終的に、複数行のTDタグに囲まれたそれぞれの文字列を
カンマで区切って表示したいと考えています。
最初に提示した前提条件が少なすぎて申し訳ありませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- その他(プログラミング・Web制作) テキストエディタで複数行にわたる文字列の行頭に番号を振る方法 4 2023/03/11 12:57
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- UNIX・Linux 次のif文について意味を教えてください。 1 2022/11/27 16:55
- PostgreSQL 数値が定期的にあらわれる文字列から、いくつめに出現した数値が指定して切り出したい 1 2023/06/08 13:12
- Excel(エクセル) エクセルで重複データから重複を削除して指定の列に抽出したい 11 2022/05/11 11:26
- その他(プログラミング・Web制作) VB.NETの正規表現について 4 2022/04/12 16:54
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Excel(エクセル) LEFT関数で文字数を指定しないで取りだす方法 7 2023/06/30 09:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
構造体のコピー
-
リストビューの列ヘッダーの幅...
-
数学についての質門です
-
[vb.net] 起動したFrom2を閉じ...
-
C#のループでtextboxに値を入れ...
-
VBA public変数はどのようなこ...
-
Functionの戻り値を配列にした...
-
エクセルVBAでテキストボッ...
-
VBAでcallで呼び出したsubを終...
-
[Excel2000]auto_closeを止めさ...
-
C言語のサフィックスについて
-
GetNextWindowがDLLファイルUse...
-
二点の座標から距離や角度を求...
-
texで図と表を並べたい
-
プロシージャまたは関数の引数...
-
テキストボックスを空白にする方法
-
【VBS】クリップボード操作につ...
-
VBA テキストボックスで計算
-
comboboxのクリックイベントに...
-
String型の値にスラッシュをつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
共有フォルダの「共有のアクセ...
-
リストビューの列ヘッダーの幅...
-
構造体のコピー
-
文字列の中からある文字の個数...
-
C言語で10行10列の行列式の値を...
-
VB.netである関数を呼んで、そ...
-
文字列を繰り返して表示する VBA
-
VBAとVB6.0とC#の速度比較
-
数学についての質門です
-
VB6で変数の配置転換
-
W1、W2<=R^nをそれぞれ同時連立...
-
VB2005でBASP21が使えません
-
ディレクトリ以下のファイル・...
-
VB2005の正規表現について
-
VBA public変数はどのようなこ...
-
他のフォームから別のフォーム...
-
C#のループでtextboxに値を入れ...
-
エクセルVBAでテキストボッ...
-
VBAでcallで呼び出したsubを終...
-
VB.NETでのイベントの途中終了
おすすめ情報