我正在尝试修改一个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>#+.\#+<
替换>#+\.#+,#+\.#+<
我知道这是行不通的,因为我告诉正则表达式用字符串'#+‘等替换它与#+
匹配的数字。
我如何通过正则表达式或其他方法实现我想要做的事情,以及如何告诉正则表达式使用表达式进行比较,但只替换它匹配的字符的子集?
发布于 2011-01-22 22:23:57
嗯,我想得比我预想的要快。下面是我使用的表达式:
我使用了以下查找字符串:
(<[a-z]+day>)([0-9]+\.[0-9]+),([0-9]+\.[0-9]+)(</[a-z]+day>)
...and以下替换字符串:
\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>
https://stackoverflow.com/questions/4770745
复制