Эта командная строка анализирует документ списка контактов, который может содержать или не содержать телефон, электронную почту или Интернет. Если у него есть все три, то все работает отлично - добавляя возврат из FormatContact () в конце строки для загрузки данных:
silent!/^\d/+1|ki|/\n^\d\|\%$/-1|kj|'i,'jd|let @a = substitute(@",'\s*Phone: \([^,]*\)\_.*','\1',"")|let @b = substitute(@",'^\_.*E-mail:\s\[\d*\]\([-_@.0-9a-zA-Z]*\)\_.*','\1',"")|let @c = substitute(@",'^\_.*Web site:\s*\[\d*\]\([-_.:/0-9a-zA-Z]*\)\_.*','\1',"")|?^\d\+?s/$/\=','.FormatContact(@a,@b,@c)
или в разбивке:
silent!/^\d/+1|ki|/\n^\d\|\%$/-1|kj|'i,'jd
let @a = substitute(@",'\s*Phone: \([^,]*\)\_.*','\1',"")
let @b = substitute(@",'^\_.*E-mail:\s\[\d*\]\([-_@.0-9a-zA-Z]*\)\_.*','\1',"")
let @c = substitute(@",'^\_.*Web site:\s*\[\d*\]\([-_.:/0-9a-zA-Z]*\)\_.*','\1',"")
?^\d\+?s/$/\=','.FormatContact(@a,@b,@c)
Я создал три отдельных поиска, чтобы не допустить сбоя в ОДНОМ поиске, если не удалось сопоставить один атом, потому что, опять же, контактная информация может существовать или не существовать для каждого контакта.
Проблема , созданная этим решением, заключалась в том, что, когда шаблон не совпадает, я получаю целое @ "в @a. Вместо этого мне нужно, чтобы оно было пустым, когда совпадения не происходит. Мне нужен каждый переменная (телефон, электронная почта, Интернет), независимо от того, пустая она или нет.
- Я не вижу флагов, которые можно установить в функции подстановки,
сделаю это.
- Есть ли способ вернуть "", если \ 1 пусто?
- Есть ли способ создать необязательный атом, чтобы поисковый запрос (и) мог по-прежнему учитывать пустое совпадение, чтобы правильно записать его как пустое?