あるテキストから"「"~"」"に挟まれた会話文を抜き出す場合、
正規表現では下記のコードでできました。
Sub RegExpTest() Dim re As VBScript_RegExp_55.RegExp Dim mc As VBScript_RegExp_55.MatchCollection Dim m As VBScript_RegExp_55.Match Dim Data As String Data = "「ABCDEFG1」" & vbCrLf & _ "「abcd" & vbCrLf & _ "efg1」" & vbCrLf & _ "aaa「ABCDEFG2」" & vbCrLf & _ "bbb「abcd" & vbCrLf & _ "efg2b」ccc" Set re = New RegExp re.Global = True re.MultiLine = True re.Pattern = "「((.|\r\n)*?)」" Set mc = re.Execute(Data) For Each m In mc Debug.Print "■"; m.Value; "■" Next End Sub
下記のように"「"~"」"が入れ子になっている場合、
うまく抜き出せません。
Data = "「ABC「DEF」G1」" & vbCrLf & _ "「abc「d" & vbCrLf & _ "ef」g1」" & vbCrLf & _ "aaa「ABCDEFG2」" & vbCrLf & _ "bbb「abcd" & vbCrLf & _ "efg2b」ccc" ```上記の場合、 > ■「ABC「DEF」■ > ■「abc「d > ef」■ > ■「ABCDEFG2」■ > ■「abcd > efg2b」■ というようになってしまいます。 下記のように入れ子部分も含めて抜き出すことは正規表現で可能でしょうか。 > ■「ABC「DEF」G1」■ > ■「abc「d > ef」g1」■ > ■「ABCDEFG2」■ > ■「abcd > efg2b」■ 正規表現を使わずに、VBAのみでループさせて抜き出すことはできています。 正規表現だけで、あるいはVBAとうまく組み合わせて簡単にできないかなと思ったので質問させていただきました。 コードはVBAの例ですが、VBScript や JavaScript でもOKです。 追記 --- 皆さん、回答ありがとうございました。 2階層までというように制限があれば正規表現一発でできるというのは皆様の回答で分かりました。 質問のサンプルは2階層まででしたが、できれば階層制限なしが希望でした。 質問内容が曖昧でした。 標準の正規表現では「無制限の入れ子は表現できない」、 しかし、言語によっては拡張されて可能である。 ということも分かりました。 今回の場合は、正規表現を使わずに、VBAのみで階層制限なしのロジックは完成しているのですが、 正規表現一発でできないのかな、あるいは正規表現を使ってもう少しシンプルに記述できないかなと、疑問の思ったのが質問に至った経緯です。 皆さんの回答は、それぞれみな参考になりましたので、どれをベストアンサーにするのか迷いましたが、 有用なロジックと、実際に使える汎用性の高いコードを提示していただいた、think49 さんとさせていただきました。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。