0

我正在研究维基百科提供的媒体 wiki xml,我正在尝试预处理数据,删除和替换文本中的一些特定表达式。一种这样的预处理是替换所有指向维基百科页面的内部链接,如下所示 -

输入 -

text here [[foo|bar]] text here [[some.jpg|some|this is an image of some]] text here

输出 -

text here foo bar text here some.jpg some this is an image of some text here

这是我目前能够实现的 -

String regex = "(\\[\\[(.+?)\\]\\]*)"; 
string.replaceAll(regex, "$2"));

这有助于我[[]]从文本中删除。但我有点卡住试图"|"用空间替换管道" "

感谢任何帮助。

4

2 回答 2

1

如果您只是想清理一组特殊字符,只需匹配这些字符

string.replaceAll("[\\[\\]\\|\\s]+", " ");
于 2013-04-07T20:57:22.503 回答
0

这将解决重复空间问题:

String regex = " \\[{2}|\\]{2} |\\|";
String result = subject.replaceAll(regex, " ");

如果您想检查您删除的方括号和管道是否真的是您正在寻找的结构的一部分(ie [[word1|word2|...|wordN]]),您还可以使用\G基于模式:

String regex = "(?:\\G(?!\\A)\\|| ?\\[\\[(?=[^\\]\\[|]+(?:\\|[^\\]\\[|]+)*+\\]\\]))([^\\]\\[|]+)(?>\\]\\])?";
String result = subject.replaceAll(regex, " $1");

演示

图案细节:

(?: # two possible starts:
    \G (?!\A) \| # 1) a start contiguous to the previous match
  | # OR
    [ ]? \[\[ # 2) the double opening square brackets
    (?= # a lookahead to test if the format is the good one
        [^\]\[|]+ (?:\| [^\]\[|]+)*+ \]\]
    )
)
([^\]\[|]+) # capture the item in group 1
(?>\]\])? # eventual double closing square brackets
于 2013-04-07T21:22:21.550 回答