2013-04-20 103 views
0

所以我想在窗体上的东西提取数据:如何轻松解析此字符串?

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

我想提取两个城市的名称和数量在年底括号内的[]。如果城市是一个字也没有“”就像这个例子:

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

现在,我使用str.split(“ - ”),然后海峡。分裂(” [”)。然而,后者并不可靠,如果我尝试使用split(“”),它将会分裂到两个词语城市的中间。

回答

5

一个正则表达式似乎分配:

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

在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(...)访问它们。
+0

谢谢你,我想了解正则表达式很长一段时间,但从来没有得到!更高级的东西的抓地力,像这样,你能解释一下这个表达中的含义吗? – Alex 2013-04-20 19:27:55

+0

@Alex我有edi特德的答案,我希望可以帮助:) – sp00m 2013-04-20 23:32:09

+0

你必须双斜杠逃脱“[”但不是“]”? – Alex 2013-04-21 12:09:19

0

通过拆分之后 - 然后使用检查contains()方法用于“如果这是真的,然后通过空和[分割

1

你也可以使用的StringTokenizer的替代正则表达式,在StringTokenizer的就可以了。指定分隔符彼此相邻,这里假设你想要的 - 和[作为分隔符,所以只写 - [中分隔符节

String input="\"San Diego\"--\"San Antonio\" [1319]"; 
StringTokenizer tok = new StringTokenizer(input, "--["); 
while (tok.hasMoreTokens()) 
{ 
    System.out.println(tok.nextToken()); 
} 
+0

它如何知道“ - ”和“[”是不同的分隔符,当他们只是写在另一个“ - ”? – Alex 2013-04-21 12:14:23

+0

我完全不知道后端,但它会以某种方式知道它 – 2013-04-21 12:52:11

+0

好的,这是很好的知道。所以规则是如果它匹配字符串中的任何部分分隔符? – Alex 2013-04-21 12:53:42