正则表达式匹配每个字符,直到某个字符为止,如果该特定字符存在

时间:2015-08-12 17:58:25

标签: java regex wikipedia-api

基本上,我正在阅读维基百科API中的信息,该信息会返回包含其降价中页面源代码的JSON代码。我使用JSON API从页面中过滤我想要的内容,现在我想以删除所有链接等方式格式化文本。

降价显示如下链接:[[wiki page|display text]]
但它也可以显示如下:[[wiki page]]

所以,我想要做的是如果管道字符存在则提取display text,但如果不存在,我只想要wiki page文本。

这是我现在的代码,检测是否有管道字符并正确处理这些字符串但不包含:

private static String format(String s) {
    return s.replaceAll("\\[\\[.+?(\\]\\]|\\|)", "").replace("[[", "").replace("]]", "").trim();
}

运行此功能时,有时会将任何显示为[[wiki page]]的文本取出,但如果管道符在那里则可以使用。如何才能使其正常工作?

2 个答案:

答案 0 :(得分:3)

您可以使用:

private static String format(String s) {
    return s.replaceAll("\\[\\[(?:[^|\\]]*\\|)?(.+?)\\]\\]", "$1");
}

RegEx Demo

答案 1 :(得分:1)

((?<=\\[\\[)[^|]*|(?<=\\|).*?)(?=\\]\\])

你可以使用它。抓住$1。见演示。

https://regex101.com/r/rO0yD8/2