- ベストアンサー
正規表現で<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 >などにも対応したりと 条件がいろいろありすぎて色々試したのですが、 どうしても分かりませんでした。 申し訳ございませんが、お助け頂ければ幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
空行を検知する方法は分からないけど、「<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かも。全然試していないので色々試行錯誤をしてみてくらはい。
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
行頭が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,"") といった具合で ・・・
お礼
redfox63様ご回答ありがとうございます。 お二人のご回答ともに大変参考になりました。 無事目的の文字列を取得することができました。 ありがとうございました。
お礼
anmochi様ご回答ありがとうございます。 お二人のご回答ともに大変参考になりました。 無事目的の文字列を取得することができました。 ありがとうございました。