我正在向 cdr (chordpro) 转换器编写文本,但在检测表单上的和弦线时遇到问题:
Cmaj7 F#m C7
Xxx xxxxxx xxx xxxxx xx x xxxxxxxxxxx xxx
这是我的python代码:
def getChordMatches(line):
import re
notes = "[CDEFGAB]";
accidentals = "(#|##|b|bb)?";
chords = "(maj|min|m|sus|aug|dim)?";
additions = "[0-9]?"
return re.findall(notes + accidentals + chords + additions, line)
我希望它返回一个列表 ["Cmaj7"、"F#m"、"C7"]。上面的代码不起作用,我一直在努力处理文档,但我没有得到任何结果。
为什么将类和组链接在一起不起作用?
编辑
谢谢,我最终得到了以下内容,它涵盖了我的大部分需求(例如,它与 E#m11 不匹配)。
def getChordMatches(line):
import re
notes = "[ABCDEFG]";
accidentals = "(?:#|##|b|bb)?";
chords = "(?:maj|min|m|sus|aug|dim)?"
additions = "[0-9]?"
chordFormPattern = notes + accidentals + chords + additions
fullPattern = chordFormPattern + "(?:/%s)?\s" % (notes + accidentals)
matches = [x.replace(' ', '').replace('\n', '') for x in re.findall(fullPattern, line)]
positions = [x.start() for x in re.finditer(fullPattern, line)]
return matches, positions