如何轻松解析此字符串?

Ale*_*lex 0 java string parsing split

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

"圣地亚哥" - "圣安东尼奥"[1319]

我想在括号[]中提取两个城市名称和最后的数字.如果城市是一个单词,则在此示例中没有"":

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

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

sp0*_*00m 6

正则表达式似乎被挪用:

"?(.*?)"?--"?(.*?)"? \[(.*?)]
Run Code Online (Sandbox Code Playgroud)

在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));
}
Run Code Online (Sandbox Code Playgroud)

打印:

San Diego
San Antonio
1319
Run Code Online (Sandbox Code Playgroud)

Regexp解释

  • "?意思是"一个"或不是"
  • .*?意思是"任何字符串"
  • 括号捕获它们之间的数据,这就是为什么之后,我们可以访问它们m.group(...).