Byte Comb ( http://bytecomb.com/regular-expressions-in-vba/ ) のラッパーを使用しています。彼らはとてもうまくいっているようです。堅牢なパターンを定式化する助けが必要です。
先読み "(?=)" を "|" と組み合わせると、予期しない結果が発生します。
Input Text String Pattern RxMatch
----------------- ------- -------
iraq q(?!u) q
quit q(?!u) 0
iraq q(?=u) 0
quit q(?=u) q
sta.23.5 .1 words 67.89 ch \d+\.?\d*|\.\d+(?=\s*ch) 23.5
sta.23.5 .1 words 67.89 ch (\d+\.?\d*)|(\.\d+)(?=\s*ch) 23.5
sta.23.5 .1 words 67.89 ch \d+\.?\d*(?=\s*ch) 67.89
sta.23.5 .1 words 67.89 ch \d+\.?\d*(?=\s*ch)|\.\d+(?=\s*ch) 67.89
sta.23.5 .1 words .89 ch \d+\.?\d*|\.\d+(?=\s*ch) 23.5
sta.23.5 .1 words .89 ch (\d+\.?\d*)|(\.\d+)(?=\s*ch) 23.5
sta.23.5 .1 words .89 ch \d+\.?\d*(?=\s*ch) 89
sta.23.5 .1 words .89 ch \d+\.?\d*(?=\s*ch)|\.\d+(?=\s*ch) .89
「iraq」と「quit」は期待どおりに機能します。次の入力テキスト文字列のセットでは、"67.89" を抽出し、3 番目のセットでは ".89" を抽出したいと考えています。最初に、両方の状況をカバーするために、\d+.?\d*|.\d+ を浮動小数点数として定式化しました。括弧を追加しても役に立ちませんでした。またはを削除すると、67.89 に役立ちました。最後に、実用的な解決策を見つけました。しかし、もっと良いものはありますか?優先順位を理解するのを手伝ってもらえますか? 可能であれば、or の 2 つの部分を一緒に保ちたいと思います。
ありがとう、非プログラマー!