Próbuję dodać nawiasy kwadratowe wokół akordów w standardowych dokumentach tekstowych sformatowanych dla gitary/słów, aby były bardziej kompatybilne z aplikacją OnSong. Mam zasady, ale nie rozumiem, jak dopasować wszystkie możliwe kombinacje. Zasady są:Regex dla standardowego uchwytu lirycznego/akordowego
- Akordy rozpocznie jednym AG kapitału
- jeśli AG kapitału następuje przestrzeni, linia przerwy, #, b, m, sus, sierpień, słabe, Maj, min, lub/Chciałbym czytać do następnej przerwy lub linii (ze względu na standardowe formatowanie gitary możliwe jest użycie akordu takiego jak F # min/E, a nie kłopotliwe dzielenie go na całość, chcę tylko zachować czytanie do miejsca)
- Nie można dopasować wyrażenia regularnego, jeśli po kapitale występuje inna litera, która nie znajduje się na powyższej liście (na przykład nazwa "Ed" nie powinna pasować)
- punktów bonusowych, jeśli potrafisz wymyślić, jak zrobić " Mały świat NIE pasuje do słowa NASTĘPUJĄC, że "A" nie jest prawidłowym akordem.
- superpunktowe punkty, jeśli zamiennik może usunąć spację przed (kiedy nie zaczyna linii) i po nowych nawiasach (w celu utrzymania wyrównania na miejscu) - zostało mi wskazane, że to się nie powiedzie w przypadku bliskich akordów ... jest to całkowicie do przyjęcia.
Kilka notatek: To jest dla skryptu pomocnika ... doskonałość nie jest potrzebna. Robię to ręcznie teraz, więc od czasu do czasu chybienie jest w porządku. Nie próbuję analizować szczegółów akordów, tylko je zawijać []. Podczas gdy standardowy układ to 1 rząd akordów, 1 wiersz tekstu, nie można na to liczyć, więc zdaję sobie sprawę, że niektóre scenariusze czasami się nie udają.
źródło Test (akordy są przypadkowe w celach testowych, w przypadku jakichkolwiek muzycy jechali kurant na strasznej muzyki):
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
powinien przekształcić:
[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
moja pierwsza próba zbliżyli mnie do siebie:
([A-G]((?!\s).)*)
, ale to podniosło słowa, które zaczęły się tymi literami także. I już w kółko i dopiero teraz dostał miarę:
\b([CDEFGAB](#|##|b|bb|sus|maj|min|aug)?\b)
Kiedy próbowałem użyć [^\s+]
mam mieszane wyniki podnieść więcej od tego, co chcę, ale również rowu rzeczy, których potrzebuję. Myślę, że jestem po prostu nad głową. Każda pomoc byłaby WSPANIAŁA doceniona, a wszelkie wyjaśnienia, jak to działa, byłyby jeszcze lepsze. Podczas gdy chciałbym rozwiązania, również bardzo chciałbym wyjaśnić, dlaczego to działa ...
Więc 'A # Eb // Oh man' 'będzie [A #] [Eb] // Oh man'! Ze względu na bliskość tych akordów tracimy wyrównanie (dodając nawiasy). – zessx
Dobry punkt na akordy wprost przeciwko sobie ... czasami wyrównanie po prostu nie zadziała - zaakceptowałem ten los :) – IglooWhite
Z jakim językiem lub narzędziem użyjesz regex? A czym jest to zwierzę? –