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>
您可以扩展此代码以包含有问题的情况吗?提前非常感谢您!