正規表現を使用して複数のマッチングの置換を行うには?


ベンジャミン  2009-01-24 10:14:36  No: 145693

VBのSystem.Text.RegularExpressions.Regexを用いて、複数のマッチングに対して置換を行いたいのですが、
どのようにすればよいでしょうか?
例えば、文字列strの中に改行(cr+lf)が3つ以上続く場合、該当するものすべて改行を2つにしたいのですが、
Regex.Replace(str, "(\r\n){3,}", vbCrLf & vbCrLf)
とすると、最初にマッチしたものしか置換されません。
どなたかご教示願えませんでしょうか?
よろしくお願いいたします。


ベンジャミン  2009-01-24 10:16:20  No: 145694

環境を書くのを忘れました。
VB2005ですが、VB2008でも使用するかもしれません。
よろしくお願いいたします。


YuO  2009-01-25 02:09:20  No: 145695

簡単なテストコード書いてみましたが,ちゃんとぜんぶ置換されました。
実際に,どのようなコードを書き,また,どのように確認したのでしょうか。

Imports System.Text.RegularExpressions

Module Module1
    Sub Main()
        Const target As String = _
         "A" & vbCrLf & vbCrLf & vbCrLf & _
         "B" & vbCrLf & vbCrLf & vbCrLf & vbCrLf & _
         "C"
        Const pattern As String = _
         "(\r\n){3,}"
        Const replacement As String = _
         vbCrLf & vbCrLf

        Console.WriteLine("[Before]")
        Console.WriteLine(target)
        Console.WriteLine()

        Dim replaced As String = _
         Regex.Replace(target, pattern, replacement)

        Console.WriteLine("[After]")
        Console.WriteLine(replaced)
    End Sub
End Module


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加