您可以使用
String s="[[Identity (philosophy)|unique identity]]";
Matcher m = Pattern.compile("\\[{2}(.*)\\|(.*)]]").matcher(s);
if (m.matches()) {
System.out.println(m.group(1).replaceAll("\\W+", " ").trim().replace(" ", "_")); // // => Identity_philosphy
System.out.println(m.group(2).trim()); // => unique identity
}
查看Java 演示。
细节
"\\[{2}(.*)\\|(.*)]]"
withmatches()
被解析为^\[{2}(.*)\|(.*)]]\z
匹配以 开头的字符串的模式, [[
然后匹配并捕获除换行符之外的任何 0 个或更多字符到第 1 组中,然后匹配 a |
,然后匹配并捕获任何 0 个或更多字符除了换行符尽可能多地进入第 2 组,然后匹配]]
。请参阅正则表达式演示。
第 2 组中的内容可以从空格中删除并按原样使用,但第 1 组应通过将所有 1+ 非单词字符块替换为空格 ( .replaceAll("\\W+", " ")
) 进行预处理,然后修剪结果 ( .trim()
) 并将所有空格替换为_
( .replace(" ", "_")
)作为最后的接触。