1

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 つの部分を一緒に保ちたいと思います。

ありがとう、非プログラマー!

4

1 に答える 1