Проект:
Возьмите список римских консулов в Википедии, поместите данные в CSV, чтобы я мог составить график роста и падения различных генов с точки зрения консульства
Пример данныхисточник:
509,L. Iunius Brutus,L. Tarquinius Collatinus
suff.,Sp. Lucretius Tricipitinus,P. Valerius Poplicola
suff.,M. Horatius Pulvillus,
508,P. Valerius Poplicola II,T. Lucretius Tricipitinus
507,P. Valerius Poplicola III,M. Horatius Pulvillus II
Поиск по Vim:
/\v(\d+|suff\.),((\w+\.=) (\w+)(\s\w+)=(\s\w+)=(\s[iv]+)=(\s\(.{-}\))=,=){,2}
По существу:
- Найти год в начале (или указание на консул суффикса):
(\d+|suff\.)
- Следующая группа (назовем ее внешней группой) должна быть найдена до двух раз:
(outer group){,2}
- Для каждой из этих двух внешних групп найдите:
- Praenomen, с дополнительным периодом (иногда его нет):
(\w+.=)
- Номен:
(\w+)
- Необязательные когномены (включая пробел, как и все ниже):
(\s\w+)=
- Необязательный agnomen:
(\s\w+)=
- Необязательная итерация (указывает на n-й раз, когда он был консулом).Источник данных не имеет более 8 итераций (поэтому достаточно I и V):
(\s[iv]+)=
- Дополнительная пояснительная записка типа "Сициний (Сабин?)":
(\s\(.{-}\))=
(Последняя запятая необязательна, так как это конец строки.)
Таким образом, обратные ссылки оказываются:
\1: year or suffect
\2: the entire second outer group
\3: Praenomen of second outer group (same with all below)
\4: Nomen
\5: Cognomen
\6: Agnomen
\7: Iteration
\8: Explanatory note
Проблема в том, что я могуне могу понять, как захватить эту первую внешнюю группу.Это похоже на то, что ссылки \ 2 и \ 3- \ 8 перезаписываются, когда он видит эту вторую внешнюю группу.
Используя эту замену:
:%s//1:{\1}^I2:{\2}^I3:{\3}^I4:{\4}^I5:{\5}^I6:{\6}^I7:{\7}^I8:{\8}^I9:{\9}
Я получаю такой вывод:
1:{509} 2:{L. Tarquinius Collatinus} 3:{L.} 4:{Tarquinius} 5:{ Collatinus} 6:{} 7:{} 8:{} 9:{}
1:{suff.} 2:{P. Valerius Poplicola} 3:{P.} 4:{Valerius} 5:{ Poplicola} 6:{} 7:{} 8:{} 9:{}
1:{suff.} 2:{M. Horatius Pulvillus,} 3:{M.} 4:{Horatius} 5:{ Pulvillus} 6:{} 7:{} 8:{} 9:{}
1:{508} 2:{T. Lucretius Tricipitinus} 3:{T.} 4:{Lucretius} 5:{ Tricipitinus} 6:{ II} 7:{} 8:{} 9:{}
1:{507} 2:{M. Horatius Pulvillus II} 3:{M.} 4:{Horatius} 5:{ Pulvillus} 6:{ II} 7:{} 8:{} 9:{}
Я не могу получить доступ к этим группам в первой внешней группе.Я думаю, что они перезаписываются: они перезаписываются?Если да, есть ли способ обойти это?
Редактировать: Оригинальное название Регулярное выражение Vim (или любое совместимое регулярное выражение): как ссылаться на группу (внутри группы), если внешняя группа повторяется?