Webから特定の段落を取得したい

こんにちは!

Webページからデータスクレイピングで取得したテキストから
特定の文字列を含む段落を取得したいと思っています。

《Webページ》

【段落一つ目】(\r\n)
あああああああああああ
ああああああああ(\r\n)
いいいいいいい(\r\n)
ううううううううううう
うううううううう(\r\n)
(\r\n)
【段落二つ目】(\r\n)
ええええええ(\r\n)
おおおおおおおおおおお(\r\n)
かかかかかかかかかか
かかかかかかかか(\r\n)
(\r\n)
【段落三つ目】(\r\n)
けけけけけけけけけ
けけ(\r\n)
ここここここ(\r\n)
(\r\n)

このようにデータテーブルに格納された情報から「段落二つ目」を検索し
その次の段落まで抜き出したいと思っています。

《取得したい結果》
【段落二つ目】(\r\n)
ええええええ(\r\n)
おおおおおおおおおおお(\r\n)
かかかかかかかかかか
かかかかかかかか(\r\n)

Split(vbCrlF.ToCharArray) で改行コードまでを区切り配列に格納して
For EachでContains(“段落二つ目”) で検索して見つかった文字列から
次の段落までの情報を取得する方法が分かりません。

ご教示の程、よろしくお願いいたします。

こんにちは

DataTableのひとつのアイテムに上記の文字列全体が格納されており、
これから段落を抽出したいということであっていますでしょうか?

【段落二つ目】を基準に抽出したいのであれば以下のような正規表現で抽出できると思います。

strResult = System.Text.RegularExpressions.Regex.Match(text,"【段落二つ目】[\s\S]*?(?=\r\n\r\n)").value

もし各段落を配列に入れたいのであれば、実際のデータにも依存しますが、
\r\n\r\nでSplitすればよいと思います。

arrStr = Strings.Split(text,vbcrLF+vbcrLf)

または

arrStr = System.Text.RegularExpressions.Regex.Split(text,"\r\n\r\n")

として、arrStr(1)で2段落目が抽出できると思います。

また改行が3つ以上あったり、改行コードがLFのみの場合あ、途中空白文字なども含まれるケースは

arrStr = System.Text.RegularExpressions.Regex.Split(text,"(\s*?\n){2,}",System.Text.RegularExpressions.RegexOptions.ExplicitCapture)

のような感じにして、arrStr(1)で取得できると思います。

1 Like

>DataTableのひとつのアイテムに上記の文字列全体が格納されており、
これから段落を抽出したいということであっていますでしょうか?
⇒はい。その通りです。

段落の操作のパターンを複数教えていただきありがとうございました。
とても勉強になります。

追加で質問させていただきたく。

例えば、正規表現の抽出の場合、検索した文字列から\r\n\r\nまでになりますが
検索した文字列の行すべてを含めたい場合はどのように表記したらよいでしょうか?

検索したい文字列(”二つ目”)

《取得した結果》
二つ目】(\r\n)
ええええええ(\r\n)
おおおおおおおおおおお(\r\n)
かかかかかかかかかか
かかかかかかかか(\r\n)

《取得したい結果》
【段落二つ目】(\r\n)
ええええええ(\r\n)
おおおおおおおおおおお(\r\n)
かかかかかかかかかか
かかかかかかかか(\r\n)

ご教示の程、よろしくお願いいたします。

こんにちは

以下でいかがでしょうか?

strResult = System.Text.RegularExpressions.Regex.Match(text,".*?二つ目[\s\S]*?(?=\r\n\r\n)").value
1 Like

Yoichiさん

期待通りの処理結果を得ることができました!
ご教示いただき、本当にありがとうございました。

1 Like

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.