需要正则表达式帮助修改XML文件

时间:2011-01-22 21:31:16

标签: xml regex bbedit

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

我知道这无论如何都行不通,因为我告诉正则表达式将#+与{{1}}匹配的数字替换为字符串'#+'等。

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

1 个答案:

答案 0 :(得分: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>