• ベストアンサー

正規表現で<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 >などにも対応したりと 条件がいろいろありすぎて色々試したのですが、 どうしても分かりませんでした。 申し訳ございませんが、お助け頂ければ幸いです。

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 空行を検知する方法は分からないけど、「<BR>が<br>や<Br><bR>< br >など・・・・」は「<\s*[Bb][Rr]\s*>」にマッチするんじゃないかな。「開きカク括弧が1文字あり、空白(\s)が0文字以上続き、Bまたはbが1文字あり、Rまたはrが1文字あり、空白が0文字以上続き、閉じカク括弧が1文字ある」というパターンになる。  「<\s*[/]?[Bb][Rr]\s*>」とすると、</BR>もひっかかるかも。「<\s*[Bb][Rr][/]?\s*>」だと<BR/>もOKかも。全然試していないので色々試行錯誤をしてみてくらはい。

goo081102
質問者

お礼

anmochi様ご回答ありがとうございます。 お二人のご回答ともに大変参考になりました。 無事目的の文字列を取得することができました。 ありがとうございました。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

行頭がABCではじまってそれに続く<BR>と空行は ^(ABC\s+((<\s*[/]?br[/]?\s*>\s+)*)\s+) でよさそうです 単なる空行は ^(\s) 行末がXYZで終わってその前にある<BR>と空行は ((<\s[/]?br[/]?\s*>\s+)*)\s+(XYZ)$ といった具合です これを regexのReplaceにかけてやれば良いようですが dim sPat as String = "^(ABC\s+((<\s*[/]?br[/]?\s*>\s+)*)\s+)|" _ "^(\s)|((<\s[/]?br[/]?\s*>\s+)*)\s+(XYZ)$" Dim r As New Regex(sPat, RegexOptions.MultiLine or RegexOptions.IgnoreCase) TextBox1.Text = r.Replase(STR,"") といった具合で ・・・

goo081102
質問者

お礼

redfox63様ご回答ありがとうございます。 お二人のご回答ともに大変参考になりました。 無事目的の文字列を取得することができました。 ありがとうございました。

関連するQ&A