0

正規表現と以下の単語を考えると、区切り文字の後の部分が数字であり、その後に何も来ない場合にのみ、 - の後の部分(_またはスペースでもかまいません)を一致させたいです(基本的に数字になりたい番号のみ)。グループステートメントを使用していますが、正しく機能していないようです。最初の 3 (または、少し変更すると最後の 1) に一致し続けます。(グループ化を使用して)これを達成するにはどうすればよいですか?

ターゲットワード:BR0227-3G1

正規表現:([A-Z]*\s?[0-9]*)[\s_-]*([1-9][1-9]*)

3G1、G1、1G と一致してはいけません

3、10、2 などの純粋な数字のみに一致する必要があります。

正規表現を評価するためのヘルパー Web サイトもここにあります: http://www.pythonregex.com/

その他の例:

一致する必要があります:

BR0227-3
BR0227 3
BR0227_3

グループに(BR0227) (3)

のみ一致(BR0227)する必要があります

BR0227-3G1
BR0227-CS
BR0227
BR0227-
4

3 に答える 3

2

私は使うだろう

re.findall('^([A-Z]*\s?[0-9]*)[\s_-]*([1-9][1-9]*$)?', str)

各文字列は最初のグループで始まり、最後のグループで終わるため、^および$グループがキャプチャに役立ちます。$最後のでは、すべての数字をキャプチャする必要がありますが、これはオプションであるため、最初のグループを引き続きキャプチャできます。

于 2013-02-28T19:52:49.673 に答える
1

グループ内の単語の開始と(可能な)終了が必要なため、次のようにします。

r'\b([A-Z0-9]+)(?:[ _-](\d+))?\b'

これにより、単語の最初の部分が最初のグループに配置され、必要に応じて残りの部分が 2 番目のグループに配置されます。None一致しなかった場合は 2 番目のグループになります。

于 2013-02-28T19:43:21.497 に答える
0

これは、「-」、「 」、または「_」の後に数字のみが続くものと一致する必要があります。

(.*)[- _](\d+)
于 2013-02-28T19:50:12.970 に答える