所以我想在窗体上的东西提取数据:如何轻松解析此字符串?
“圣地亚哥” - “圣安东尼奥” [1319]
我想提取两个城市的名称和数量在年底括号内的[]。如果城市是一个字也没有“”就像这个例子:
托莱多 - 斯普林菲尔德[677]
现在,我使用str.split(“ - ”),然后海峡。分裂(” [”)。然而,后者并不可靠,如果我尝试使用split(“”),它将会分裂到两个词语城市的中间。
所以我想在窗体上的东西提取数据:如何轻松解析此字符串?
“圣地亚哥” - “圣安东尼奥” [1319]
我想提取两个城市的名称和数量在年底括号内的[]。如果城市是一个字也没有“”就像这个例子:
托莱多 - 斯普林菲尔德[677]
现在,我使用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());
}
谢谢你,我想了解正则表达式很长一段时间,但从来没有得到!更高级的东西的抓地力,像这样,你能解释一下这个表达中的含义吗? – Alex 2013-04-20 19:27:55
@Alex我有edi特德的答案,我希望可以帮助:) – sp00m 2013-04-20 23:32:09
你必须双斜杠逃脱“[”但不是“]”? – Alex 2013-04-21 12:09:19