仅当特定字符存在时,正则表达式匹配每个字符直到特定字符

Regex matching every character until a certain character ONLY if that certain character exists

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

Markdown 显示链接如下:[[wiki page|display text]]
但是也可以这样显示:[[wiki page]]

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

这是我现在的代码,应该检测是否有竖线字符并正确处理这些字符串,但没有:

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

当 运行 时,它有时会删除显示为简单 [[wiki page]] 的任何文本,但如果有竖线字符,它会起作用。我如何设法让它正常工作?

您可以使用:

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

RegEx Demo

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

您可以使用 this.Grab 和 。查看演示。

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