我有以下形式的输入字符串,"[[Animal rights]] [[Anthropocentrism]] [[Anthropology]]"
我需要提取令牌"Animal rights" , "Anthropocentrism"
等。
我尝试在 String 库中使用 split 方法,但我无法找到合适的正则表达式来获取令牌,如果有人可以提供帮助,那就太好了。
我基本上是在尝试解析 Wikipedia XML 文件中的内部链接,您可以在此处查看格式。
您可能不应该split()
在这里使用,而是使用Matcher
:
String input = "[[Animal rights]] [[Anthropocentrism]] [[Anthropology]]";
Matcher m = Pattern.compile("\\[\\[(.*?)\\]\\]").matcher(input);
while (m.find()) {
System.out.println(m.group(1));
}
动物权益 人类中心主义 人类学
像这样的模式应该有效:
\[\[(.*?)\]\]
这将匹配一个文字[[
,后跟零个或多个任何字符,非贪婪地,在组 1 中捕获,然后是文字]]
。
不要忘记\
在 Java 字符串文字中转义:
Pattern.compile("\\[\\[(.*)?\\]\\]");
使用正则表达式非常容易。
\[\[(.+?)\]\]
我建议执行 a.+
以确保括号中确实有某些内容,并且当您尝试将其放入数组时,如果某些内容不存在 ,您将不会得到 a 。null
string output = new string [10];
string pattern = "\[\[(.+?)\]\]";
string input = "[[Animal rights]] [[Anthropocentrism]] [[Anthropology]]";
Matcher m = Pattern.compile(pattern).matcher(input);
int increment= 0;
while (m.find()) {
output[increment] = m.group(1);
increment++;
}
既然你说你想学习正则表达式,我也会把它分解。
\[
2x正在寻找[
你需要的括号,\
因为它是正则表达式的特殊字符.
可以表示除换行符以外的所有字符+
表示该字符中的一个或多个?
重复上一个项目一次或多次。懒惰,所以引擎首先只匹配前一个项目一次,然后再尝试与前一个项目的匹配不断增加的排列。\]
正在捕捉]
尝试下一个:
String str = "[[Animal rights]] [[Anthropocentrism]] [[Anthropology]]";
str = str.replaceAll("(^\\[\\[|\\]\\]$)", "");
String[] array = str.split("\\]\\] \\[\\[");
System.out.println(Arrays.toString(array));
// prints "[Animal rights, Anthropocentrism, Anthropology]"