Нужна помощь в регулярных выражениях для изменения файла XML - PullRequest
0 голосов
/ 23 января 2011

Я пытаюсь изменить файл XML, который содержит элементы, содержащие время открытия для филиалов бизнеса.Файл XML несовместим, потому что для некоторых веток у него есть только время открытия и время закрытия, у других - время открытия, время закрытия на обед, время открытия после обеда и время закрытия.

Примеры обоих типов ниже:

<monday>10.00,17.00</monday>
<monday>09.00,12.30,13.30,17.00</monday>

Я хочу переформатировать эти строки в лучший формат, например, приведенный ниже:

<monday>
  <open>10.00</open>
  <lunch></lunch>
  <close>17.00</close>
</monday>

<monday>
  <open>09.00</open>
  <lunch>12.30 - 13.30</lunch>
  <close>17.00</close>
</monday>

Я былпытаюсь использовать регулярные выражения BBEdit на моем Mac для внесения изменений, но у меня возникают трудности, в частности, я думаю, потому что я не уверен, как заставить регулярное выражение заменить подмножество текста, которому я говорю, чтобы оно соответствовало.Например, в псевдокоде я хочу, чтобы регулярное выражение делало это:

заменить <monday>time1,time2</monday>
на <monday><open>time1</open><lunch></lunch><close>time2</close></monday>

заменить <monday>time1,time2,time3,time4</monday>
на <monday><open>time1</open><lunch>time2 - time3</lunch><close>time4</close></monday>

Я не слишком знаком с регулярными выражениями, поэтому я делаю некоторые ошибки, я уверен, но до сих пор я пробовал следующее:

заменить >#+\.#+,#+\.#+< на ><open>#+\.#+<open><lunch></lunch><close>#+.\#+<

Я понимаю, что это все равно не сработает, потому что я говорю регулярному выражению заменить числа, которым оно соответствует #+, на строки '# +' и т. Д.

Как можноЯ добиваюсь того, что хочу сделать, с помощью регулярных выражений или другими способами, а также как сказать регулярному выражению использовать выражение для сравнения, но заменить только подмножество символов, которым оно соответствует?

1 Ответ

0 голосов
/ 23 января 2011

Ну, я понял это быстрее, чем ожидал. Вот выражения, которые я использовал:

Я использовал следующую строку поиска:

(<[a-z]+day>)([0-9]+\.[0-9]+),([0-9]+\.[0-9]+)(</[a-z]+day>)

... и следующая строка замены:

\1<open>\2</open><lunch></lunch><close>\3</close>\4

для соответствия следующим строкам:

<monday>10.00,17.00</monday>

, что привело к следующему выводу:

<monday><open>10.00</open><lunch></lunch><close>17.00</close></monday>
...