正则表达式可替换XML中的年份

XML有很多年,我想在<dc:date>标签中找到它们,并仅提取4位数字的年份。提取的年份应附带其他信息(与原始数据无关)。

数据示例

<dc:date>1455</dc:date>
<dc:date></dc:date> (data is empty)
<dc:date>1455-02</dc:date>
<dc:date>145</dc:date>
<dc:date>c1455</dc:date>
<dc:date>14xx</dc:date>
<dc:date>1455-1699</dc:date>
<dc:date>1455-12-09,1699-10-02</dc:date>

我使用分组技术提出了一个解决方案。

匹配:

<dc:date>(.*?(\d{4}).*)<\/dc:date>

替换:

<dc:date>$1<\/dc:date>\n\t<skos:changeNote>This data is changed!</skos:changeNote>\n\t<dc:date>http://dbpedia.org/resource/$2</dc:date>

结果通常是我所期望的:

<dc:date>1222-02-02</dc:date>
    <skos:changeNote>This data is changed!</skos:changeNote>
    <dc:date>http://dbpedia.org/resource/1222</dc:date>
<dc:date>1455-12-05</dc:date>
    <skos:changeNote>This data is changed!</skos:changeNote>
    <dc:date>http://dbpedia.org/resource/1455</dc:date>
<dc:date>1455</dc:date>
    <skos:changeNote>This data is changed!</skos:changeNote>
    <dc:date>http://dbpedia.org/resource/1455</dc:date>
<dc:date></dc:date>
<dc:date>1455-02</dc:date>
    <skos:changeNote>This data is changed!</skos:changeNote>
    <dc:date>http://dbpedia.org/resource/1455</dc:date>
<dc:date>145</dc:date>
<dc:date>c1455</dc:date>
    <skos:changeNote>This data is changed!</skos:changeNote>
    <dc:date>http://dbpedia.org/resource/1455</dc:date>
<dc:date>14xx</dc:date>
<dc:date>1455-1699</dc:date>
    <skos:changeNote>This data is changed!</skos:changeNote>
    <dc:date>http://dbpedia.org/resource/1455</dc:date>
<dc:date>1455-12-09,1699-10-02</dc:date>
    <skos:changeNote>This data is changed!</skos:changeNote>
    <dc:date>http://dbpedia.org/resource/1455</dc:date>

但是,在最后两个示例中,仅提取了第一年(1455)。在这种情况下,应提取两年(1455年和1699年)。应该在与第一个4位数字(1455)相同的条件下找到第二个4位数字(例如1699)。正确的答案是:

<dc:date>1455-1699</dc:date>
    <skos:changeNote>This data is changed!</skos:changeNote>
    <dc:date>http://dbpedia.org/resource/1455</dc:date>
    <dc:date>http://dbpedia.org/resource/1699</dc:date>
<dc:date>1455-12-09,1699-10-02</dc:date>
    <skos:changeNote>This data is changed!</skos:changeNote>
    <dc:date>http://dbpedia.org/resource/1455</dc:date>
    <dc:date>http://dbpedia.org/resource/1699</dc:date>

您可以扩展此代码以包含有问题的情况吗?提前非常感谢您!

h12405asdf 回答:正则表达式可替换XML中的年份

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3108725.html

大家都在问