Я пытаюсь добавить квадратные скобки вокруг аккордов в стандартных текстовых документах, отформатированных для гитары/текстов, чтобы сделать их более совместимыми с приложением OnSong. У меня есть правила, но я не понимаю, как соответствовать всем возможным комбинациям. Правила:Regex для стандартного гитарного лирического/аккордового брекетинга
- Аккорды начинаются с одного капиталом AG
- если капитал AG следует пробел, разрыв строку, #, б, м, сус, Август, тусклая, майор, мин, или/я хотел бы прочитать до следующего пробела или разрыва строки (из-за стандартного форматирования гитары, может быть такой аккорд, как F # min/E, и вместо того, чтобы беспокоиться об этом, я просто хочу продолжать чтение до места)
- Регулярное выражение НЕ должно совпадать, если за столицей AG следует другая буква, не указанная выше (например, имя «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
должен превратиться в:
[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 // О человек' будет '[A #] [Eb] // О человек'!? Из-за близости этих аккордов мы теряем выравнивание (добавление скобок). – zessx
Хорошая точка на аккордах прямо друг против друга ... иногда выравнивание просто не работает - я принял эту судьбу :) – IglooWhite
С каким языком или инструментом вы будете использовать регулярное выражение? И что это за животное? –