Sto provando ad aggiungere parentesi quadre su accordi in documenti di testo standard formattati per chitarra/testi per renderli più compatibili con l'app OnSong. Ho le regole ma non capisco come abbinare per tutte le possibili combinazioni. Le regole sono:Regex per il bracket di accordi/accordi di chitarra standard
- Chords inizierà con un singolo AG capitale
- se l'AG capitale è seguito da uno spazio, rottura del cavo, #, B, M, sus, agosto, fioca, maj, min, o/Mi piacerebbe leggere fino al prossimo spazio o interruzione di riga (a causa della formattazione standard della chitarra, un accordo come F # min/E è possibile, e piuttosto che preoccuparsi di dividere tutto, voglio solo continuare a leggere fino allo spazio)
- La regex NON deve corrispondere se la capital AG è seguita da un'altra lettera non presente nell'elenco (ad esempio il nome "Ed" non deve corrispondere)
- punti bonus se riesci a capire come fare " Un piccolo mondo "NON corrisponde alla parola SEGUENDO che la" A "non è un accordo valido.
- punti super bonus se la sostituzione può rimuovere uno spazio prima (quando non si avvia una linea) e dopo le nuove parentesi (per mantenere l'allineamento in posizione) - mi è stato fatto notare che questo non funzionerà su accordi ravvicinati ... questo è completamente accettabile.
Un paio di note: questo è per uno script di supporto ... la perfezione non è necessaria. Lo faccio a mano proprio ora, quindi la miss occasionale va bene. Non sto cercando di analizzare i dettagli degli accordi, solo per avvolgerli in []. Mentre il layout standard è costituito da 1 riga di accordi, 1 riga di testo, questo non può essere conteggiato, quindi sono consapevole che alcuni scenari falliranno occasionalmente.
fonte di prova (accordi sono casuali a scopo di test, nel caso in cui eventuali musicisti stavano per carillon in sulla musica terribile):
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
dovrebbe girare in:
[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
Il mio primo tentativo mi ha stretto con:
([A-G]((?!\s).)*)
ma che ha raccolto parole che sono iniziate con quelle lettere anche. Ho fatto il giro in tondo ora e solo ottenuto per quanto riguarda:
\b([CDEFGAB](#|##|b|bb|sus|maj|min|aug)?\b)
Quando ho provato ad utilizzare [^\s+]
ottengo risultati misti che raccogliere più di ciò che voglio, ma anche fosso cose che ho bisogno. Penso di essere appena sopra la mia testa. Qualsiasi aiuto sarebbe GRANDE apprezzato e qualsiasi spiegazione su come funziona sarebbe ancora meglio. Anche se mi piacerebbe una soluzione, mi piacerebbe anche molto spiegare perché funziona ...
Così 'A # Eb // Oh uomo' 'diventerà [A #] [Eb] // Oh uomo'!? A causa della vicinanza di questi accordi, perdiamo l'allineamento (aggiungendo le parentesi). – zessx
Buon punto sugli accordi uno contro l'altro ... a volte l'allineamento non funzionerà - Ho accettato quel destino :) – IglooWhite
Con quale linguaggio o strumento userete la regex? E cos'è questo animale? –