私は正規表現にかなり慣れていません、そして私は理解できない問題に遭遇しました:
任意の数のAZ、0〜9、および_文字で始まる文字のセットを一致させようとしています。これらの文字の後には、オプションで1つの括弧のセットで囲まれた数字が続き、元の文字列からスペース(またはそうでない)
これが見つけるべきものの例:
_ABCD1E
_123FD(13)
ABDF1G (2)
これは私の現在の正規表現です:
[A-Z_0-9]+\s*\({0,1}[\d]*\){0,1}
すべてが正常に検出されていますが、次の場合に問題が発生します。
_ABCDE )
「)」ではなく_ABCDEのみを取得する必要がありますが、現在は「_ABCDE)」を取得しています。
(#)を取得しても、そのパターン全体が存在しない場合に余分な文字を取得できない方法はありますか?
可能であれば、答えを得るだけでなく、私が学びたいと思っている構文を説明してください。
答え:次のコードは、私がこれまでに必要としていたものに対して機能しています。
[A-Z_0-9]+(\s*\([\d]+\)){0,1}
# or, as has been mentioned, the above can be simplified
# and cleaned up a bit to be
[A-Z_0-9]+(\s*\(\d+\))?
# The [] around \d are unnecessary and {0,1} is equivalent to ?
(#)パターンの前後に括弧を追加すると、?を使用できます。またはパターン全体で{0,1}。また、[\d]*を[\d]+に変更して、括弧内に少なくとも1つの数字が含まれるようにしました。
迅速な回答をありがとう、すべて!