我正在尝试在为吉他/歌词格式化的标准文本文档中的和弦周围添加方括号,以使它们与 OnSong 应用程序更兼容。我有规则,但不明白如何匹配所有可能的组合。规则是:
- 和弦将以单个大写 AG 开头
- 如果大写 AG 后跟空格、换行符、#、b、m、sus、aug、dim、maj、min 或 / 我想读到下一个空格或换行符(因为标准吉他格式,像 F#min/E 这样的和弦是可能的,我不想费心把它全部分开,我只想一直读到空格)
- 如果大写 AG 后面跟着另一个不在上面列表中的字母,则正则表达式不应匹配(例如,名称“Ed”不应匹配)
- 如果您能弄清楚如何使“A small world”不匹配,因为“A”后面的单词不是有效的和弦,则可以加分。
- 如果替换可以在新括号之前(不开始一行时)和之后删除一个空格(以保持对齐),则超级奖励积分 - 有人向我指出,这将在关闭和弦上失败......这完全是可以接受。
一些注意事项:这是一个帮助脚本......不需要完美。我现在是手工做的,所以偶尔错过是可以的。我不是试图解析和弦的细节,只是将它们包装在 [] 中。虽然标准布局是 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+]
我得到的结果好坏参半,得到了更多我想要的东西,但也抛弃了我需要的东西。我想我只是在我的头上。任何帮助将不胜感激,任何关于它如何工作的解释都会更好。虽然我想要一个解决方案,但我也很想解释它为什么有效......