1

Pythonの正規表現を使用してコード名を解析したいと思います。次のコードは、G#mのようなコードにのみ一致します

chord_regex = "(?P<chord>[A-G])(?P<accidental>#|b)?(?P<additional>m?)"

コードをGm#の形に合わせるにはどうすればよいですか?上記の正規表現を変更して、これらのタイプのコードにも一致させることはできますか?

4

1 に答える 1

2

{m,n}次のように、構文を使用してグループの一致を指定m=0する必要がありますn=2(このグループは偶発的または追加のいずれかです)。

>>> import re
>>> regex = "(?P<chord>[A-G])((?P<accidental>#|b)|(?P<additional>m)){0,2}"
>>> re.match(regex, "Gm").groupdict()
{'chord': 'G', 'additional': 'm', 'accidental': None}
>>> re.match(regex, "G").groupdict()
{'chord': 'G', 'additional': None, 'accidental': None}
>>> re.match(regex, "G#m").groupdict()
{'chord': 'G', 'additional': 'm', 'accidental': '#'}
>>> re.match(regex, "Gm#").groupdict()
{'chord': 'G', 'additional': 'm', 'accidental': '#'}
于 2013-03-11T00:03:38.367 に答える