朧の.Netの足跡
問合せ先:support@oborodukiyo.info サイト内検索はこちら
正規表現 クォテーションで囲まれた文字列を抜き出す





下のようになるのですが、一つポイントを言うと、\でエスケープしている方は、すごく\が多いですが、 正規表現では\を2個連続で表現しなくてはならず、またC#では\は2個連続でエスケープしなくてはならないので、\が4個連続します。
クォテーションで囲まれたCSVのデータを抜き出すのにも使えます。

C#

            private string TEXT07 = "'あさ','ひ''る','''よる'";
        private string TEXT08 = "'あさ','ひ\'る','\'\'よる'";
        private string TEXT09 = "\"あさ\",\"ひ\\\"\\\"る\",\"\\\"\\\"よる\"";
            Regex r16 = new Regex("('([^']*(''[^']*)*)')");
            MatchCollection m16 = r16.Matches(TEXT07);

            foreach (Match m in m16)
            {
                this.textBox1.Text += "m16:" + m.Groups[1].Value + "\r\n";
            }

            Regex r17 = new Regex("('[^\\\\']*(\\\\.[^\\\\']*)*')");
            MatchCollection m17 = r17.Matches(TEXT08);

            foreach (Match m in m17)
            {
                this.textBox1.Text += "m17:" + m.Groups[1].Value + "\r\n";
            }

            Regex r18 = new Regex("(\"([^\\\\\"]*(\\\\.[^\\\\\"]*)*)\")");
            MatchCollection m18 = r18.Matches(TEXT09);

            foreach (Match m in m18)
            {
                this.textBox1.Text += "m18:" + m.Groups[1].Value + "\r\n";
            }

/*結果
m16:'あさ'
m16:'ひ''る'
m16:'''よる'
m17:'あさ'
m17:'ひ\'る'
m17:'\'\'よる'
m18:"あさ"
m18:"ひ\"\"る"
m18:"\"\"よる"
*/


VB.NET

        Private TEXT07 As String = "'あさ','ひ''る','''よる'"
    Private TEXT08 As String = "'あさ','ひ\'る','\'\'よる'"
    Private TEXT09 As String = """あさ"",""ひ""""る"",""""""よる"""

        ''で囲まれていて、途中に2個連続の'のエスケープを認識するタイプ
        Dim r16 As Regex = New Regex("('([^']*(''[^']*)*)')")
        Dim m16 As MatchCollection = r16.Matches(TEXT07)

        For Each m As Match In m16
            Me.TextBox1.Text += "m16:" & m.Groups(1).Value & vbCrLf
        Next

        ''で囲まれていて、途中に\を使った'のエスケープを認識するタイプ
        Dim r17 As Regex = New Regex("('[^\\']*(\\.[^\\']*)*')")
        Dim m17 As MatchCollection = r17.Matches(TEXT08)

        For Each m As Match In m17
            Me.TextBox1.Text += "m17:" & m.Groups(1).Value & vbCrLf
        Next

        '"で囲まれていて、途中に2個連続の"のエスケープを認識するタイプ
        Dim r18 As Regex = New Regex("(""([^""]*(""""[^""]*)*)"")")
        Dim m18 As MatchCollection = r18.Matches(TEXT09)

        For Each m As Match In m18
            Me.TextBox1.Text += "m18:" & m.Groups(1).Value & vbCrLf
        Next

'結果
'm16:'あさ'
'm16:'ひ''る'
'm16:'''よる'
'm17:'あさ'
'm17:'ひ\'る'
'm17:'\'\'よる'
'm18:"あさ"
'm18:"ひ""る"
'm18:"""よる"









良いやや良い普通やや悪い悪い

投稿日時評価コメント