从xml文件中的文本解析内部链接

时间:2013-11-27 18:37:39

标签: java regex xml-parsing

我需要在Wikinews xml文件的文本字段中显示内部链接。

在我的情况下,这些有两种格式

[[w:President of the People's Republic of China|President]]
[[People's Republic of China]] 

我应用了这些正则表达式

internalLinks = Pattern.compile("\\[\\[w:([^|:]+)\\|.*\\]\\]").matcher(internalLinks).replaceAll("##en.wikipedia.org/wiki/$1##");        

internalLinks = Pattern.compile("\\[\\[([^:|]+)\\]\\]").matcher(internalLinks).replaceAll("[[[en.wikinews.org/wiki/$1]]]");



    Pattern pattern = Pattern.compile("\\[\\[\\[(.*?)\\]\\]\\]");
    Matcher matcher = pattern.matcher(internalLinks);
    while (matcher.find()) 
    {           
            interLinks += matcher.group(1)+",";
    }


    Pattern pattern1 = Pattern.compile("##(.*?)##");
    Matcher matcher1 = pattern1.matcher(internalLinks);
    while (matcher1.find()) 
    {           
            interLinks += matcher1.group(1)+",";
    }

    if (interLinks.length() > 0) {
        interLinks = interLinks.substring(0, interLinks.length()-1);
        return interLinks;
    } else return "";

问题是它只是给了我匹配第一个模式的链接,而且只有少数链接,只有3-4个而不是全部

这里我提供了文档文本字段的摘录。

  

{{date | November 13,2004}}   [{巴西}} [[w:胡锦涛|胡锦涛]],[[中华人民共和国主席] [中华人民共和国主席]]今天[[中华人民共和国主席]]与[[ w:[[巴西]],[[w:LuizInácioLulada Silva |LuizInácioLulada Silva]]的巴西总统,巴西总统,在''Granja do Torto'',总统的国家住所[[w:巴西联邦区|巴西联邦区]]。午餐是传统的巴西[[w:烧烤|烧烤]],有各种各样的肉。

     

一些巴西部长出席了此次活动:[[w:Antonio Palocci | Antonio Palocci]](经济),[[w:pt:Eduardo Campos | Eduardo Campos]]([[w:科技部] (巴西)|科学技术]],[[w:JoãoRobertoRodrigues | Roberto Rodrigues]](农业),[[w:pt:Luiz Fernando Furlan | Luiz Fernando Furlan]](发展),[[w: Celso Amorim | Celso Amorim]]([[w:

部      

对外关系(巴西)|外部关系]],[[w:Dilma Rousseff | Dilma Rousseff]](矿业和能源)。出席的还有[[w:pt:Roger Agnelli | Roger Agnelli]]([[w:Vale(矿业公司)| Vale do Rio Doce]]公司总裁)和Eduardo Dutra([[w:Petrobras | Petrobras]],政府石油公司,总裁)。

     

这次会议是巴西与中国之间新的[[w:政治经济|政治经济]]协议的一部分,巴西承认中国大陆[[社会主义市场经济|市场经济]]地位,中国承诺购买更多[[w:巴西经济|巴西产品]]。

2 个答案:

答案 0 :(得分:0)

我访问了下载页面,其上写着:

  

有关提供的数据格式的文档,请参阅Meta:Data转储。

我猜他们提供了比普通正则表达式更好的解析方法,请查看...

答案 1 :(得分:0)

解决方案

\[\[(?:w:)?.*?\]\]

描述

Regular expression visualization

讨论

此正则表达式假定字符序列]]不会出现在[[]]之间。 我现在无法找到]]的转义序列。

演示

http://regexr.com?37e51