代码之家  ›  专栏  ›  技术社区  ›  whitebear

音乐和弦名称的python正则表达式

  •  0
  • whitebear  · 技术社区  · 3 年前

    我想把音乐和弦分开。

    例如

    AEDm [A,E,Dm]

    DmEbD7 [Dm,Eb,D7]

    DmF# [Dm,F#]

    我编写的代码如下

    m = re.match("([A-Z][#bm7]*)([A-Z][#bm7]*)+",chord_name_str)
    print(group(m))
    

    但它匹配 FGAm [F,Am] [F,G,Am]

    我哪里错了??

    1 回复  |  直到 3 年前
        1
  •  4
  •   PacketLoss    3 年前

    您只需在此处使用一个捕获组,即可实现您想要的结果。

    chords = ['AEDm', 'DmEbD7', 'DmF#', 'FGAm']
    for chord in chords:
        print(chord, re.findall("([A-Z][#bm7]*)",chord))
    
        
    #AEDm ['A', 'E', 'Dm']
    #DmEbD7 ['Dm', 'Eb', 'D7']
    #DmF# ['Dm', 'F#']
    #FGAm ['F', 'G', 'Am']