OnSong アプリとの互換性を高めるために、ギター/歌詞用にフォーマットされた標準テキスト ドキュメントのコードの周りに角括弧を追加しようとしています。ルールはありますが、考えられるすべての組み合わせを一致させる方法がわかりません。ルールは次のとおりです。
- コードは単一の大文字 AG で始まります
- 大文字の AG の後にスペース、改行、#、b、m、sus、aug、dim、maj、min、または / が続く場合 次の空白または改行まで読みたい (標準的なギター形式のため) 、F#min/E のようなコードも可能で、わざわざ分割するのではなく、スペースまで読み続けたい)
- 大文字の AG の後に上記のリストにない別の文字が続く場合、正規表現は一致しません (たとえば、名前「Ed」は一致しません)。
- 「A」に続く単語が有効なコードではないため、「A small world」を一致させない方法を理解できれば、ボーナス ポイントが得られます。
- 置換が前に(行を開始していないとき)および新しいブラケットの後にスペースを削除できる場合(位置合わせを維持するため)、スーパーボーナスポイント-これは近い和音では失敗することが指摘されました...これは完全です許容できる。
いくつかの注意事項: これはヘルパー スクリプト用です...完璧は必要ありません。今は手作業で行っているので、たまにミスがあっても大丈夫です。コードの詳細を解析しようとしているのではなく、[] でラップするだけです。コード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+]
と、必要なものをより多く取得するだけでなく、必要なものを捨てるという、さまざまな結果が得られます。私はちょうど私の頭の上にあると思います。どんな助けでも大歓迎であり、それがどのように機能するかについての説明はさらに良いでしょう. 解決策が欲しいのですが、なぜそれが機能するのかを説明したいと思います...