所以我想从表单上的某些内容中提取数据:
“圣地亚哥” - “圣安东尼奥”[1319]
我想在括号[]中提取两个城市名称和最后的数字。如果城市是一个单词,则在此示例中没有“”:
托莱多 - 斯普林菲尔德[677]
现在我正在使用str.split(“ - ”)然后使用str.split(“[”)。然而,后者不是有害的,如果我尝试使用分裂(“”),它将分裂在两个单词城市的中间。
答案 0 :(得分: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
正则表达式解释
"?
表示“a "
或不是” .*?
表示“any string” m.group(...)
访问它们。答案 1 :(得分:1)
在拆分后 - 然后使用contains()方法检查“如果它为真,则按空格拆分并[。
答案 2 :(得分:1)
你也可以使用StringTokenizer替代正则表达式,在StringTokenizer中你可以指定彼此相邻的分隔符,这里假设你想要 - 和[作为分隔符,所以只需写 - [在分隔符部分
String input="\"San Diego\"--\"San Antonio\" [1319]";
StringTokenizer tok = new StringTokenizer(input, "--[");
while (tok.hasMoreTokens())
{
System.out.println(tok.nextToken());
}