用正则表达式解析和弦

时间:2013-03-10 18:58:05

标签: python parsing

我想在python中使用正则表达式解析和弦名称。以下代码仅匹配G#m

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

我怎样才能将和弦与Gm#形状相匹配?可以改变上述正则表达式以匹配这些类型的和弦吗?

1 个答案:

答案 0 :(得分:2)

您应该使用{m,n}语法指定组的m=0n=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': '#'}