patterns = {}
patterns[1] = re.compile("[A-Z]\d-[A-Z]\d")
patterns[2] = re.compile("[A-Z]\d-[A-Z]\d\d")
patterns[3] = re.compile("[A-Z]\d\d-[A-Z]\d\d")
patterns[4] = re.compile("[A-Z]\d\d-[A-Z]\d\d\d")
patterns[5] = re.compile("[A-Z]\d\d\d-[A-Z]\d\d\d")
patterns[6] = re.compile("[A-Z][A-Z]\d-[A-Z][A-Z]\d")
patterns[7] = re.compile("[A-Z][A-Z]\d-[A-Z][A-Z]\d\d")
patterns[8] = re.compile("[A-Z][A-Z]\d\d-[A-Z][A-Z]\d\d")
patterns[9] = re.compile("[A-Z][A-Z]\d\d-[A-Z][A-Z]\d\d\d")
patterns[10] = re.compile("[A-Z][A-Z]\d\d\d-[A-Z][A-Z]\d\d\d")
def matchFound(toSearch):
for items in sorted(patterns.keys(), reverse=True):
matchObject = patterns[items].search(toSearch)
if matchObject:
return items
return 0
はその後、私はマッチを探すために、次のコードを使用します。これらのPython正規表現を簡略化することは可能ですか?
while matchFound(toSearch) > 0:
私は、10種類の正規表現を持っていますが、私は彼らが、1に置き換えだけでなく、よりエレガントな正規表現を書くことができたような気がします。あなたはそれが可能だと思いますか?
EDIT:
patterns[11] = re.compile("[A-Z]\d-[A-Z]\d\d\d")
patterns[12] = re.compile("[A-Z][A-Z]\d-[A-Z][A-Z]\d\d\d")
EDIT2:TWO以上の式を忘れてしまった私は、次のようになってしまいました。私は余分な結果を得ることができたが、私は解析しているデータでは可能ではないと思います。
patterns = {}
patterns[1] = re.compile("[A-Z]{1,2}\d-[A-Z]{1,2}\d{1,3}")
patterns[2] = re.compile("[A-Z]{1,2}\d\d-[A-Z]{1,2}\d{2,3}")
patterns[3] = re.compile("[A-Z]{1,2}\d\d\d-[A-Z]{1,2}\d\d\d")
脇パターンから。P – Andrew
複数の正規表現は、「これらのいずれかと一致するものを見つける」と言う場合は、常に1つの正規表現で置き換えることができます(* '*')。あなたの直感はここであなたによく役立っています。証明:正規表現を定義する文字列を '|'あなたはそれを構築しました。つまり、この場合、Seanはあなたのために私が説明したものをさらに単純化するものを作りました。 – Crisfole
実際にあなたの質問に答えていない(私はSeanが既に行ったと信じています)私が使っているチートシートを推薦したいと思います。私は個人的には非常に珍しいregexpを使用しているので、私はいつもこのchetsheetに相談しています - http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/ - 私はそれが非常に便利だと思います。ただあなたのデスクのどこかにそれを印刷してください:) – Timur