Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2013)
正規表現 括弧で囲まれる場合は無視したい
投稿日時: 20/01/02 09:22:21
投稿者: closetsoft

以下のような文字列で「M6」もしくは「M06」から始まり、「T〇〇」(〇は数値)で終わる部分を抽出したいと考えております。
 
文字列:T1M6AAA(T2)M6BBBT3M6CCCT4M6DDD
 
しかし、T〇〇が()括弧で囲まれる場合は無視したく、つまり上記文字列の場合は
 
・M6AAA(T2)M6BBBT3
・M6CCCT4
 
が抽出されればと思い、以下のようなパターンを作成しました
 
パターン:M(0|)6([^\(]*?|)T\d{1,3}([^\)]*?|)
 
ですが実際に抽出されたのは
 
・M6BBBT3
・M6CCCT4
 
が抽出され、どこが間違っているのかわからず途方にくれてしまいました。
 
こちらでコードの作成を依頼することが禁止されているのは承知しておりますので、どなた様かヒントだけでもご教示くださればと思っております。

回答
投稿日時: 20/01/02 09:57:26
投稿者: simple

.Pattern = "M0?6.*?T\d{1,}(?!\))"
ではどうですか?
(?!)はいわゆる否定先読みとよばれるものです。
この場合は、その後ろに")"が続かないことを条件に出来ます。

投稿日時: 20/01/02 11:01:27
投稿者: closetsoft

simple様
 
早速のご回答ありがとうございます。
 
当方にて試しましたところ、思っていた通りに抽出されました。
 
否定先読みという方法を初めて知りましたが、これで完成に向けて一歩前進することができました。
 
実用的にはもう少しパターンを考えなければなりませんが、あとは自力で解決したいと思います。
 
本当にありがとうございます。