「一致する文字列を取得」アクティビティでの取得

元のテキストが、
”ああああああああああああああ
(いいい)
うううううう
えええええ
(おおおおおお)”

のようなとき、「ううううううえええええ」を取得するために「一致する文字列を取得」アクティビティに以下の指定をしました。

元のテキストはstring変数contentに格納しています。
パターン:「"\r\n(いいい)\r\n(.*)\r\n(おおおおおお)\r\n"」
結果:result
オプション:Multiline (複数行の為)

しかし、一行を書き込みで「result(0).Groups(1).ToString」
と指定すると「オブジェクト参照がオブジェクト インスタンスに設定されていません。」と一行を書き込みアクティビティでエラーになります。

どうしたら取得できるようになるでしょうか。

こんにちは

最初に正規表現での抽出条件を明確にした方が良いと思いますが、(いいい)と(おおおおおお)の間の文字列を取得したいということで良いでしょうか?

まず元のテキストが
うううううう
えええええ
となっていますので、ううううううえええええ とはマッチしません。

うううううう
えええええ
とマッチさせるには改行を含める必要がありますので、
(.*) ではなく例えば ([\s\S]*) とする必要があります。

また
元のテキストは(おおおおおお)"と改行無しで終わっていますが、
パターンの方が改行付きとなっているため、この通りですとマッチしません。
元のテキストの方を正とするならパターンの最後の\r\nを削除してください。

上記を総合しますと

"\r\n(いいい)\r\n([\s\S]*)\r\n(おおおおおお)"

を試してみてはと思います。なおMultilineオプションは不要です。

あと参考ですが、以下のようにすれば、result(0).Value として直接マッチ文字列を取得できると思います。

"(?<=\r\n(いいい)\r\n)[\s\S]*?(?=\r\n(おおおおおお))"
1 Like

こちらで解決いたしました。
大変勉強になりました。ありがとうございます。

1 Like

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.