0

我正在尝试修改一个 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>

我一直在尝试在我的 Mac 上使用 BBEdit 正则表达式进行更改,但我遇到了困难,特别是我认为因为我不确定如何让正则表达式替换我告诉它的文本子集匹配。例如,在伪代码中,我希望正则表达式这样做:

替换<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>#+.\#+<

我知道这无论如何都行不通,因为我告诉正则表达式#+用字符串“#+”等替换它匹配的数字。

如何通过正则表达式或其他方式实现我想要做的事情,以及如何告诉正则表达式使用表达式进行比较,但只替换它匹配的字符的子集?

4

1 回答 1

0

好吧,我比我预期的要快。以下是我使用的表达方式:

我使用了以下查找字符串:

(<[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>
于 2011-01-22T22:23:57.047 回答