- 和弦将以一个大写字母A-G开头
- 如果大写A-G后面跟着一个空格、断行、#、b、m、sus、aug、dim、maj、min或/,我想读取到下一个空格或断行(由于标准吉他格式,像F#min /E这样的和弦是可能的,而我只想一直读到空格,而不想麻烦地分割)
- 如果大写A-G后跟着另一个不在上述列表中的字母,则正则表达式不应匹配(例如名称“Ed”不应匹配)
- 如果你能找出如何使“一片小小世界”由于后面的单词不是有效的和弦而不匹配,则可以额外得分。
- 如果替换可以删除新括号前面的空格(当不是在行首时)和括号后面的空格(以保持对齐),则可以超级加分。 - 有人指出这会在关闭和弦上失败... 这是完全可以接受的。
一些注意事项:这是一个辅助脚本...不需要完美。我现在手动完成这个操作,所以偶尔会有错误。我并不试图分析和弦的细节,只是将它们包裹在[]中。虽然标准布局是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
Should turn into:
[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+]
时,结果千差万别,有时会获取更多我需要的内容,但也会遗漏必要的内容。我觉得这是自己超出了能力范围。非常感谢任何帮助,并且更好的解释它的工作原理将不胜感激。虽然我想要一个解决方案,但我也真的很想知道为什么它有效...
A# Eb // Oh man!
将变成[A#][Eb] // Oh man!
?由于这些和弦的接近,我们失去了对齐(添加括号)。 - zessx