gpt4 book ai didi

regex - 用于标准吉他歌词/和弦包围的正则表达式

转载 作者:行者123 更新时间:2023-12-04 13:26:45 26 4
gpt4 key购买 nike

我试图在格式化为吉他/歌词的标准文本文件中的和弦周围添加方括号,以使其与OnSong应用程序更加兼容。我有规则,但不了解如何为所有可能的组合进行匹配。规则是:

  • 和弦将以大写A-G开头
  • ,如果大写字母AG后跟一个空格,换行符,#,b,m,sus,aug,dim,maj,min或/我想阅读直到下一个空格或换行符(由于使用标准吉他)格式化,可以像F#min/E这样的和弦,而不是费力地将其全部拆分,我只想继续阅读直到空间就可以了)
  • 如果大写A-G后跟另一个不在上面列表中的字母,则正则表达式不匹配(例如,名称“Ed”不匹配)
  • 奖励积分,如果您能弄清楚由于“跟随”这个单词不是有效的和弦而使“一个小世界”不匹配的话。
  • super 加分,如果替换可以在新括号之前(当不开始一行时)和之后删除空格(以保持对齐)-有人向我指出,在和弦关闭时它将失败...这是完全可以接受。

  • 几个注意事项:这是用于辅助脚本的……不需要完美。我现在手动完成此操作,因此偶尔会错过机会。我并不是试图解析和弦的细节,只是将它们包裹在[]中。虽然标准布局是1行和弦,1行歌词,但不能指望,因此我知道某些情况下偶尔会失败。

    测试源(出于测试目的,和弦是随机的,以防万一有音乐家想在可怕的音乐中鸣叫):
    Db    Dsus4/F#           A            Cbmin/C
    A man can't be asked for that much to do
    D/F# G A D#/E
    And I can't sweep you off of your feet

    应该变成:
    [Db]  [Dsus4/F#]         [A]          [Cbmin/C]
    A man can't be asked for that much to do
    [D/F#] [G] [A] [D#/E]
    And I can't sweep you off of your feet

    我的第一次尝试使我接近:
    ([A-G]((?!\s).)*)

    但这也选择了以这些字母开头的单词。我现在已经转了一圈,直到到达:
    \b([CDEFGAB](#|##|b|bb|sus|maj|min|aug)?\b)

    当我尝试使用 [^\s+]时,会得到混合的结果,这些结果不仅能得到我想要的东西,而且还会抛弃我需要的东西。我想我只是头顶上的。任何帮助将不胜感激,并且对它如何工作的任何解释都将更好。虽然我想要一个解决方案,但我也非常乐于解释它为何有效...

    最佳答案

    这将通过您的示例输入通过,并达到您的所有“ super 奖励积分”要求:

    String output = input.replaceAll("(?m)(^| )([A-G](##?|bb?)?((sus|maj|min|aug|dim)\\d?)?(/[A-G](##?|bb?)?)?)( (?!\\w)|$)", "[$2]");

    此代码将其转换为单个字符串,并嵌入了行费用:
    Db    Dsus4/F#           A            Cbmin/C
    A man can't be asked for that much to do
    D/F# G A D#/E
    And I can't sweep you off of your feet

    变成这个:
    [Db]  [Dsus4/F#]         [A]          [Cbmin/C]
    A man can't be asked for that much to do
    [D/F#] [G] [A] [D#/E]
    And I can't sweep you off of your feet

    关于regex - 用于标准吉他歌词/和弦包围的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29144822/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com