• ベストアンサー

VBAの正規表現について教えてください

文章に含まれる下記文字を抽出したいのですが、書き方を教えてください。 抽出したい文字 「#hogehoge 」  の「#」から最後の「半角スペース」までです。 上記文字が含まれている文章は こんにちは #aiuoeo さん、#kakikukeko さん、私は・・・・ #hogehoge 先日の・・・ などの文章です。 先頭が必ず#とは限らず、最後も半角スペースではないので、 ^#.*$/sなどではありません。 また、1回とは限らず複数回でてくることもあります。 正規表現で書くことは可能なのでしょうか。 初歩的な質問で大変申し訳ありませんが、どうぞ宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

> 先頭が必ず#とは限らず、最後も半角スペースではないので、 この文章は大変わかりにくいですが、次の意味ですよね? 「行の先頭が必ず#とは限らず、行の最後も半角スペースとは限らないので、」 それで、抽出したい文字は > 「#hogehoge 」  の「#」から最後の「半角スペース」までです。 とのことですが、この《最後の「半角スペース」まで》 という意味がまたよくわかりません。 例えば、 「#abc_123 def_456 ghi_789」 という行があった時、 「#abc_123 」までが抽出対象になりますか? それとも、「その行の最後の半角スペースまで」という意味で 「#abc_123 def_456 」までが抽出対象になりますか? 前者であれば、「#.*? 」です。(*?は最短マッチ指定) 後者であれば、「#.* 」です。 それと、「半角スペースまで抽出」と書かれると、 抽出対象にその半角スペースを含めるという意味になると思いますが 正しいですか? 実際には「半角スペースの手前までを抽出」のではないですか? そうであれば、正規表現式は 「(#.*?) 」や「(#.*) 」 のように抽出したい範囲を()で指定して正規表現検索し、 MatchオブジェクトのSubMatchesコレクションで()内の 部分を抽出します。 > また、1回とは限らず複数回でてくることもあります。 これは、RegExpオブジェクトのGlobalプロパティをTrueに設定して 正規表現検索すればよいです。 各キーワードの意味がわからなければ、RegExpオブジェクトの 説明を参照してください。 (参考) http://msdn.microsoft.com/ja-jp/library/cc392403.aspx

kasabian1
質問者

お礼

返信が非常に遅くなりまして申し訳ありません。 丁寧な回答をありがとうございます。 無事、マッチング処理が行えました。 regexpの使用方法など教えてくださいましてありがとうございました。

その他の回答 (2)

  • ap_2
  • ベストアンサー率64% (70/109)
回答No.2

文の先頭、文の最後、と読めば矛盾しないですね。 正規表現は、どの言語でもほとんど同じですよ。 VBAでは、CreateObject(VBScript.RegExp)を使います。 パターンは"#[A-Za-z]+ "で。 詳しいことは「VBA 正規表現」で検索してみてください。

kasabian1
質問者

お礼

御礼が遅くなりまして大変申し訳ありません。 パターンの設定方法や参考文献を教えてくださいましてありがとうございました。 おかげで、今回の問題は無事解決できました。 ありがとうございました。

回答No.1

>抽出したい文字 「#hogehoge 」  の「#」から最後の「半角スペース」までです。 >先頭が必ず#とは限らず、最後も半角スペースではないので、 これは矛盾しているように思えます。 また、提示された例ではどのようなマッチを望んでいるのかさっぱり分かりません。 ・ 実際に検索対象となる文章を用いて、その文と希望するマッチ結果をペアで提示してください。 ・ その際、伏せたい固有名詞などは適当に同じような単語に置き換えてもらってOkです。 ・ 実際の文章に含まれていない記号やスペースを加えないでください。 ・ パターンが複数ある場合はすべて列挙してください。イレギュラーなパターンは特に重要です。 対象文字列 1. 私はりんごを食べたいな。僕はスイカを食べたい。俺はびわを食べるよ。 2. みかん狩り、なし狩り、イチゴ狩りの日程。 期待するマッチ結果 1. りんご 、 びわ 2. みかん 、 なし

kasabian1
質問者

お礼

御礼が大変遅くなりまして申し訳ありません。 また、質問内容が曖昧でかつ矛盾のある内容となっておりまして申し訳ありませんでした。 質問の仕方など、気を付けます。 今回の問題につきましては、無事解決することができました。 どうもありがとうございました。

関連するQ&A