0

所以我想从表单上的某些东西中提取数据:

“圣地亚哥”——“圣安东尼奥”[1319]

我想在括号[]中提取城市名称和末尾的数字。如果城市是一个单词,则没有“”,如本例所示:

托莱多--斯普林菲尔德 [677]

现在我使用 str.split("--") 然后 str.split(" [")。然而后者是不可行的,如果我尝试使用 split(" ") 它将在两个单词城市的中间分裂。

4

3 回答 3

6

一个正则表达式似乎被占用:

"?(.*?)"?--"?(.*?)"? \[(.*?)]

在 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(...).
于 2013-04-20T17:24:32.487 回答
1

按 -- 分割后,使用 contains() 方法检查 " 如果为真,则按空格和 [ 分割。

于 2013-04-20T17:38:06.000 回答
1

您还可以使用 StringTokenizer 替代正则表达式,在 StringTokenizer 中您可以指定相邻的分隔符,这里假设您想要 -- 和 [ 作为分隔符,所以只需在分隔符部分写入 --[

String input="\"San Diego\"--\"San Antonio\" [1319]";
StringTokenizer tok = new StringTokenizer(input, "--[");
while (tok.hasMoreTokens()) 
{
    System.out.println(tok.nextToken());
}
于 2013-04-21T00:11:47.027 回答