仅当特定字符存在时,正则表达式匹配每个字符直到特定字符
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("\[\[(?:[^|\]]*\|)?(.+?)\]\]", "");
}
((?<=\[\[)[^|]*|(?<=\|).*?)(?=\]\])
您可以使用 this.Grab 和
。查看演示。
基本上,我正在阅读维基百科 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("\[\[(?:[^|\]]*\|)?(.+?)\]\]", "");
}
((?<=\[\[)[^|]*|(?<=\|).*?)(?=\]\])
您可以使用 this.Grab 和 。查看演示。