Регулярное выражение заменяет значение времени между форматом даты и времени - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть XML-файл с форматами даты и времени, который выглядит следующим образом:

<published>2019-01-03T23:54:00.000+10:00</published>

, это

<published>2019-01-07T14:22:00.001+10:00</published>

и т. Д., Где значение времени равно 23:54:00.000 и 14: 22: 00.001.

Как заменить только значение time между тегами <published></published> регулярными выражениями?Например, я хочу заменить оба значения времени на 03: 00: 00.000, поэтому первым примером будет

<published>2019-01-03T03:00:00.000+10:00</published>

Моя цель - использовать любые существующие инструменты / приложения Notepad ++ или веб-сайты, поскольку это намного быстрее, а нелюбые конкретные языки программирования.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Во-первых, обязательное предупреждение, чтобы не пытаться разобрать xml / html с регулярным выражением.Хорошо, если это однократная задача переформатирования, и у вас есть контроль над данными.Решение для регулярных выражений не будет очень надежным ...

Таким образом, вам понадобится инструмент, который может обрабатывать группы захвата с помощью регулярных выражений, чтобы вы могли сопоставлять весь тег published и избегать ложныхпозитивы.Подобное регулярное выражение может помочь (измените группировку захвата в соответствии с вашим инструментом):

(\<published\>\d\d\d\d-\d\d-\d\dT)\d\d:\d\d:\d\d\.\d\d\d(\+\d\d:\d\d\<\/published\>)

Обратите внимание, что выше приведено регулярное выражение в формате PCRE - демонстрация для regex101 .Возможно, вам придется настроить в соответствии с форматом, который использует ваш инструмент.

В этом регулярном выражении есть две группы захвата, одна до и одна после того времени, когда вы хотите заменить.Пример строки, которую вы можете использовать в поле замены выбранного вами инструмента: \103:00:00.000\2 (с использованием синтаксиса \1 для обратных ссылок).

0 голосов
/ 16 февраля 2019

Попробуйте это регулярное выражение:

(<published>\d{4}(?:-\d{2}){2}T)\d{2}(?::\d{2}){2}\.\d{3}([^<]*<\/published>)

Нажмите для демонстрации

Замените каждое совпадение на \103:00:00.000\2, то есть содержимое группы 1, за которым следует03:00:00.000, за которым следует содержание группы 2.

Объяснение:

  • (<published>\d{4}(?:-\d{2}){2}T) - совпадения <published>, затем 4 цифры, затем - и2 цифрами, затем -, за которыми следуют 2 цифры и буква T.Это вспомогательное совпадение фиксируется в группе 1
  • \d{2}(?::\d{2}){2}\.\d{3} - соответствует времени в формате XX:XX:XX.XXX, где X - это цифра.
  • ([^<]*<\/published>) - соответствует 0+ вхождениямлюбой символ, который не является <, за которым следует </published>.Этот суб-матч фиксируется в группе 2.

до замены: enter image description here

после замены: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...