Ограничение группы захвата регулярного выражения SQL для поиска и замены?

Мне нужно преобразовать данные из электронной таблицы в операторы вставки в SQL. Я разработал большинство регулярных выражений для использования инструмента поиска и замены в SSMS, но столкнулся с проблемой при попытке сослаться на 9-й элемент в скобках в моей последней замене.

Вот исходная запись:

Blue Doe 12/21/1967 1126 Queens Highway Torrance CA 90802 N 1/1/2012

И это то, что мне нужно (на данный момент):

select 'Blue','Doe','19671221','1126 Queens Highway','Torrance','CA','90802','N','20120101'

Из-за ограничений на количество разрешенных элементов в скобках я должен выполнить замену три раза.Это может работать в хранимой процедуре, если я смогу сначала заставить это работать как POC.

Это первое совпадающее выражение:

^{:w:b:w:b}{:z}/{:z}/{:z:b[0-9A-Za-z:b]+:b:w:b[A-Z]+:b:z:b:w:b}{:z}/{:z}/{:z}

И замена: \10\2/0\3/\40\5/0\6/\7

Это добавляет нули к месяцам и дней так, чтобы в них было не менее двух символов.

При следующем совпадении даты переформатируются в формат, требуемый в запросе (без комментариев по поводу неиспользования поля даты. Это требование клиента к базе данных).

Соответствующее выражение:

^{:w:b:w:b}[0-9]*{[0-9]^2}/[0-9]*{[0-9]^2}/{:z}{:b[0-9A-Za-z:b]+:b:w:b[A-Z]+:b:z:b:w:b}[0-9]*{[0-9]^2}/[0-9]*{[0-9]^2}/{:z}

И замена: \1\4\(2,2)\(2,3)\5\8\(2,6)\(2,7)

Наконец, финальное совпадение вставляет результаты в оператор SQL, который будет использоваться в операторе вставки.

Соответствующее выражение:

^{:w}:b{:w}:b{:z}:b{[0-9A-Za-z:b]+}:b{:w}:b{[A-Z]+}:b{:z}:b{:w}:b{:z}

И замена: выберите '\1','\2','\3','\4','\5','\6','\7 ','\8','\9'

Все работает, кроме последней замены. По какой-то причине \9 НЕ получает данные из матча. Если я просто заменю все выражение замены на \9, я получу пустое место. Если я использую \8, я получаю N. Если я удаляю 8-й элемент в скобках, таким образом делая мой 9-й элемент восьмым, он возвращает то, что я хочу, 20120101.

Итак, мой вопрос: разрешает ли SSMS/SQL 9 выражений с тегами при использовании поиска/замены и регулярных выражений? Или я что-то здесь упускаю? Я знаю, что есть другие способы сделать это. Я просто пытаюсь сделать это быстро в качестве POC, прежде чем мы перенесем это в sproc или приложение.

Спасибо за любую помощь. -Питер

6
задан Peter Anderson 29 March 2012 в 21:18
поделиться