Найдите и замените изменяющийся формат даты в notepad с помощью регулярных выражений

#regex #string #date #notepad

Вопрос:

Мне нужно изменить формат даты многих значений в файле SQL.

Есть значения дат, которые находятся в формате «DD-MON-RR», но мне нужно, чтобы они были в формате «ГГГГ-ММ-ДД».

В файле у меня есть даты 21-го и 20-го веков:

 to_date('01-Nov-20','DD-MON-RR'),to_date('28-Dec-99','DD-MON-RR')  

Я ищу регулярное выражение, чтобы найти и заменить эти значения.

Это была моя первая попытка, работает даже с 20-го века:

 FIND:  (d{2})-(w{3})-(([0-4])d|[5-9]d)  REPLACE:  (?{4}20:19)3-2-1  

Это помогает изменить порядок расположения элементов, но я должен заменить все месяцы соответствующими числами.

Теперь я ищу что-то, чтобы найти и заменить названия месяцев в одном и том же регулярном выражении:

 FIND:  (d{2})-((Jan)|(Feb)|(Mar)|(Apr)|(May)|(Jun)|(Jul)|(Aug)|(Sep)|(Oct)|(Nov)|(Dec))-(([0-4])d|[5-9]d)  

Теперь у меня возникли проблемы с написанием выражения замены, кто-нибудь может мне помочь?

Спасибо

Ответ №1:

Вы можете определить как можно больше месяцев (сокращений месяцев) вместо (w{3}) и использовать немного больше условий в шаблоне условной замены.

Вы можете использовать

Найти Что: (d{2})-(?:(Jan)|(Feb)|(Mar)|(Apr)|(May)|(Jun)|(Jul)|(Aug)|(Sep)|(Oct)|(Nov)|(Dec))-(([0-4])d|[5-9]d)
Заменить На: (?{15}20:19)$14-(?{13}12:?{12}11:?{11}10:?{10}09:?{9}08:?{8}07:?{7}06:?{6}05:?{5}04:?{4}03:?{3}02:?{2}01)-$1

Смотрите демонстрационный скриншот:

введите описание изображения здесь

Таким (w{3}) (?:(Jan)|(Feb)|(Mar)|(Apr)|(May)|(Jun)|(Jul)|(Aug)|(Sep)|(Oct)|(Nov)|(Dec)) образом, заменяется группой без захвата с 12 группами захвата. Вы можете отредактировать его, скажем, чтобы также поддержать Sept , добавить t? после Sep или добавить e? после Jun , чтобы также поддержать June .

Схема замены корректируется с учетом вновь введенных 12 групп захвата.

Комментарии:

1. Почему не одна группа захвата, такая как (Jan|Feb|Mar|…) ?

2. @knittl Потому что каждая группа месяцев должна быть отдельно проверена на соответствие, иначе вы не сможете использовать шаблон условной замены.

3. Я понимаю. Спасибо. Я никогда не использовал условные замены в NP