2017-10-25 7 views
-2
import re 

str_1 = "ABABABABABAabababaacdcdcdcd" 
str_2 = "ABABABABAB1ab2babaacdcdcdcd" 
str_3 = "123456A" 
str_4 = "123456" 

#str_3Plus_d = re.search(r'(?=.*?\d)[A-Z\d]{10,}',str_2).group(0) 
str_3Plus_d = re.search(r'(?=.*?\d)[A-Z\d]{2,4}',str_2).group(0) 
print(str_3Plus_d) 

#str_3plus_a = re.search(r'(?=.*?\d)(?=.*?[A-Z])[A-Z\d]{3,}',str_4).group(0) 

#str_3plus_both = re.search(r'(?=.*?\d)(?=.*?[A-Z])[A-Z\d]{3,}',str_4).group(0) 

STRING([A-Z]とDIGITS)の検索にはまっています。私は類似の質問をここで検索しました - https://stackoverflow.com/a/28334645/4928635、それは(?=。*?\ d) "少なくとも1桁をチェックします"と書かれていますが、そのようではありません。見られるように - 何の数字を持っていない -Python Regex - [A-Z]とDIGITSのSTRING(

str_3Plus_d = re.search(r'(?=.*?\d)[A-Z\d]{2,4}',str_2).group(0) 
print(str_3Plus_d) 

それは私に文字列を出力しますか?下図のように、それは私のJupyterNotebookに印刷する文字列がある - 「の例として、変数の文字数と、少なくとも2桁と、せいぜい4桁の数字、 - - どのようにキャッチする - AAABBB2223で文字列をキャプチャする方法

ABAB 

「...

さらに明確化 -

  1. PM-2ring @: - 数字とアルファベット文字は任意の順序で発生する可能性があり、捕獲しようとしているサブストリングイムは、長さを変えることができます。

  2. @ jean-françois-fabre:あなたはあなたの答えを削除したようです。あなたが与えたコードは、あなたが言ったことを正確に行いました。

  3. @clasg: - あなたのコメントと回答の両方が今日私によく教えてくれました - 非常に感謝しています - 私はいつか戻って、あなたの答えをアップアップしたいと思ったら教えてください。

+0

''([A-Z] + \ d \ d +) ''とは何ですか?どうしてキャプチャしないもの? –

+0

あなたの正規表現は2〜4文字または数字に一致します。先読み '(?=。*?\ d)'は文字に制限はありません。したがって、数字が5桁目以降になると、先読みはそれを見つけますが、 '[A-Z \ d] {2,4}'とマッチしません。 – ClasG

+1

@ Jean-FrançoisFabreこれは*非キャプチャ*グループではありません。 *肯定的な見方です*。 – ClasG

答えて

0

あなたは先読みに定量化し、いくつかを移動することで、これを行うことができます...

^(?=(?:[^\d\n]*\d){2,4}[^\d\n]*$)[A-Z\d]*$ 

それは少し複雑だが、仕事をし、それが必要として。

[^\d\n]は、数字または改行以外は一致します。ポジティブルックアヘッドを何回でも一致させてから(*)、数字を続けて 2-4回、最後にを非数字/ LFにもう一度とすると、 2桁と4桁の数字が含まれている場合

See it here at regex101

関連する問題