所以我想从表单上的某些东西中提取数据:
“圣地亚哥”——“圣安东尼奥”[1319]
我想在括号[]中提取城市名称和末尾的数字。如果城市是一个单词,则没有“”,如本例所示:
托莱多--斯普林菲尔德 [677]
现在我使用 str.split("--") 然后 str.split(" [")。然而后者是不可行的,如果我尝试使用 split(" ") 它将在两个单词城市的中间分裂。
一个正则表达式似乎被占用:
"?(.*?)"?--"?(.*?)"? \[(.*?)]
在 Java 中:
Pattern p = Pattern.compile("\"?(.*?)\"?--\"?(.*?)\"? \\[(.*?)]");
Matcher m = p.matcher("\"San Diego\"--\"San Antonio\" [1319]");
if (m.find()) {
System.out.println(m.group(1));
System.out.println(m.group(2));
System.out.println(m.group(3));
}
印刷:
San Diego
San Antonio
1319
正则表达式解释
"?
意思是“一个"
或不是”.*?
意思是“任何字符串”m.group(...)
.按 -- 分割后,使用 contains() 方法检查 " 如果为真,则按空格和 [ 分割。
您还可以使用 StringTokenizer 替代正则表达式,在 StringTokenizer 中您可以指定相邻的分隔符,这里假设您想要 -- 和 [ 作为分隔符,所以只需在分隔符部分写入 --[
String input="\"San Diego\"--\"San Antonio\" [1319]";
StringTokenizer tok = new StringTokenizer(input, "--[");
while (tok.hasMoreTokens())
{
System.out.println(tok.nextToken());
}