アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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かも。全然試していないので色々試行錯誤をしてみてくらはい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/11/20 00:18

行頭が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,"")

といった具合で ・・・
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/11/20 00:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!