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

2024-04-18

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

  • 和弦将以单个大写 A-G 开头
  • 如果大写 A-G 后跟空格、换行符、#、b、m、sus、aug、dim、maj、min 或 / 我想阅读直到下一个空格或换行符(因为标准吉他格式) ,像 F#min/E 这样的和弦是可能的,我不想把它全部分开,我只想继续阅读直到空间)
  • 如果大写 A-G 后跟不在上面列表中的另一个字母,则正则表达式不应匹配(例如名称“Ed”不应匹配)
  • 如果您能弄清楚如何因“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+]我得到的结果好坏参半,得到了更多我想要的东西,但也放弃了我需要的东西。我想我已经超出了我的能力范围。任何帮助将不胜感激,任何有关其工作原理的解释都会更好。虽然我想要一个解决方案,但我也很想解释它为什么有效......


这通过使用您的示例输入并实现您所有的“超级奖励积分”要求:

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

标准吉他歌词/和弦包围的正则表达式 的相关文章

随机推荐

  • NSLocale currentLocale 始终返回“en_US”而不是用户当前的语言

    我正在国际化 iPhone 应用程序 我需要根据用户当前的区域设置对某些视图进行编程更改 我快要疯了 因为无论 iPhone 模拟器或实际硬件上的语言偏好是什么 locale始终评估为 en US NSString locale NSLoc
  • Unity fps 旋转相机

    在我的游戏中 我有一个摄像头 我希望将 FPS 之类的旋转附加到该摄像头上 因此 如果我将光标向左移动 我希望凸轮向左旋转 如果我向上移动光标 那么凸轮应该向上看 等等 我目前已经部分工作 我可以左看 右看 上看 下看 当我向下看然后左右移
  • 从Python中的当前日期获取7天前的日期[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我试图在 python 中获取从当前日期开始 7 天前的日期 谁能帮我 import datetime as DT today DT da
  • 如何处理在 JQuery 中返回字符串的 JSON 请求?

    json jQuery 新手 如果这有一个明显的答案 我很抱歉 我正在 jQuery 中执行 ajax 请求 如下所示 ajax url theURL dataType jsonp type get success function dat
  • ServiceRoute + WebServiceHostFactory 杀死 WSDL 生成?如何使用 ?wsdl 创建无扩展的 WCF 服务

    我正在尝试使用无扩展名 无 svc WCF 服务 其他人可以确认或否认我遇到的问题吗 我在代码中使用路由 并在 global asax cs 的 Application Start 中执行此操作 RouteTable Routes Add
  • 将用户从 SP 中注销,但不从 IDP 中注销

    是否可以将用户从使用 SAML 身份验证的应用程序中注销 但让他们保持登录 IDP 的状态 以便他们可以继续访问其他服务提供商 我希望能够将用户从应用程序中注销 并让他们在返回应用程序时进行身份验证 而无需将其从 IDP 中注销 即我不想使
  • 放弃支持库 v7。我做错了什么?

    我需要为 2 3 及更高版本的设备添加操作栏 我最近知道了 appcompat v7 支持库 它正是这样做的 我已经按照支持库设置指南 http developer android com tools support library set
  • Debian 在没有桌面的情况下启动 Qt GUI 应用程序

    我在 SBC 上运行 Debian 2 6 我计划在嵌入式设置中使用它 我需要做的是配置它 以便 linux 启动并运行我的 Qt GUI 应用程序 我是否需要窗口管理器来执行此操作 或者我可以使用 X11 来执行此操作吗 另外 因为它将用
  • Vuetify v-select 组件宽度改变

    My v select组件应该有固定的宽度 60px 它们适合表格单元格 我想防止它们在选择值后更改宽度 它们会更改宽度 并且下拉箭头在选择后会向右移动 因此如果有办法减小图标或其填充 边距的大小 可能会有所帮助 真的不知道如何获取这个箭头
  • AVAudioSinkNode 具有非默认但仍然是设备本机采样率

    我已经配置了AVAudioSinkNode附于AVAudioEngine s inputNode像这样 let sinkNode AVAudioSinkNode timestamp frames audioBufferList gt OSS
  • Matplotlib 补丁有漏洞

    以下代码有效 问题是我不知道它为什么有效 该代码绘制一个圆形面片 使用 PathPatch 并从中心切出一个三角形 我的猜测是 内三角形被切掉 因为它是顺时针绘制的 而外圆是逆时针绘制的 如果方向不反转 三角形就不会被剪切 我在文档中没有找
  • 更改所有 Woocommerce 电子邮件通知中的“回复”电子邮件地址

    在 Woocommerce 中 我想更改应始终用作的电子邮件地址回复地址对于所有电子邮件通知 Woocommerce 如何做到这一点 以下操作将更改所有电子邮件通知中的 回复 电子邮件地址 和姓名 add filter woocommerc
  • kendo-numerictextbox' 不是已知元素

    我在尝试在 Angular 7 应用程序中实现 kendo numerictextbox 时遇到错误 我目前正在使用 kendo dropdownlist 和文本框控件 没有任何问题 我不确定缺少哪个包 我是否缺少一些依赖
  • 如何获取接受的入站套接字的 IP 地址?

    我的问题是 服务器将创建一个套接字 绑定到给定端口并使用地址 INADDR ANY 监听 和接受 新连接 然后 我们可以获取客户端的ip地址 来自接受 现在 我想知道服务器的IP地址 因为服务器的主机有 上面有多个网卡 如何知道接受的入站套
  • 使用 mongoose 和 Fixie(Heroku 附加组件)连接到 mongodb

    我有一个托管在 Atlas MongoDB Cloud 集群上的 mongodb 数据库 我目前正在使用 mongoose 访问 Node js 应用程序中的数据库 mongoose connect mongodb user pw clus
  • R:格式化xtable中的数字

    我有数据 transaction lt c 1 2 3 date lt c 2010 01 31 2010 02 28 2010 03 31 type lt c debit debit credit amount lt c 500 1000
  • QML 不显示 svg 图像

    我编写了一个简单的 QML ui 它使用一些 svg 图像 当我在桌面上执行该应用程序时 一切都很好 显示了 UI 以及上面的 svg 图像 当我尝试在嵌入式设备 运行嵌入式 Windows 上执行应用程序时 会出现问题 在这种情况下 会显
  • IMemoryCache 保证唯一的新密钥 .NET-Core

    我正在尝试使用Microsoft Extensions Caching Memory IMemoryCache接口 类 我需要向缓存添加一个新项目 并确保不会覆盖已保存的任何其他内容 目前 所有密钥都是自动生成和随机的 不是顺序的 如何针对
  • 获取 PostgreSQL 中两个日期之间的结果

    我有下表 id user id start date end date integer integer date date Fields start date and end date持有日期值 例如YYYY MM DD 该表中的条目可能如
  • 标准吉他歌词/和弦包围的正则表达式

    我正在尝试在为吉他 歌词格式化的标准文本文档中的和弦周围添加方括号 以使它们与 OnSong 应用程序更兼容 我有规则 但不明白如何匹配所有可能的组合 规则是 和弦将以单个大写 A G 开头 如果大写 A G 后跟空格 换行符 b m su