我有一个动态输入信息的示例,如下所示:
Xbox 360(黑色)精英控制台120GB(伊利诺伊州梅森城)200美元
$ 200 2013 North Trail Camper(RT 202.曼彻斯特,缅因州)$ 224 /月。
Snowmobile自行车拖车(Winthrop / Augusta)每月40美元
“伟大的圣诞礼物”XBox 360吉他英雄(Springfied)
我正在尝试在Android中使用Regex将字符串分成三部分:
有时会出现价格,即()中位置之后的文字。
我试过
Pattern p = Pattern.compile("\(([^]*)\)");
Matcher m = p.matcher(title);
但我不能让匹配器在Android中工作。当我查看matcher.group(1)
时,它总是返回空白。我现在设置它以寻找(或$和爆炸也给我单独的字符串。但这是不准确和低效。
任何帮助都得到了帮助!
答案 0 :(得分:4)
我怀疑你可以用正则表达式做到这一点,但不要这样做可能更简单。
String input[] = {
"Xbox 360 (black) Elite Console 120GB (Mason City Illinois ) $200",
"$200 2013 North Trail Camper (RT 202. Manchester, Maine) $224/mo.",
"Snowmobile Bike trailers (Winthrop / Augusta) $40 Monthly",
"\"Great Xmas Gift\" XBox 360 Guitar Hero (Springfied)"
};
for (String s : input) {
int lastClose = s.lastIndexOf(')');
int lastOpen = s.lastIndexOf('(', lastClose);
System.out.println(s.substring(0, lastOpen).trim() +
"~" + s.substring(lastOpen + 1, lastClose).trim() +
"~" + s.substring(lastClose + 1).trim());
}
打印
Xbox 360 (black) Elite Console 120GB~Mason City Illinois~$200
$200 2013 North Trail Camper~RT 202. Manchester, Maine~$224/mo.
Snowmobile Bike trailers~Winthrop / Augusta~$40 Monthly
"Great Xmas Gift" XBox 360 Guitar Hero~Springfied~
答案 1 :(得分:1)
不确定是否需要使用正则表达式,但如果不这样做,为什么不使用String.split。然后,您可以使用"\\(|\\)"
将字符串拆分为括号,然后从创建的字符串数组中获取各个部分。
答案 2 :(得分:1)
[编辑] 我不会为这个问题使用正则表达式;相反,我只是使用String#lastIndexOf(...)
方法查找最后(
和)
个字符的边界,并从这些值返回子字符串:
public static String[] splitParens(String s) {
if (s == null) return null;
int indexOfLastOpenParen = s.lastIndexOf('(');
int indexOfLastCloseParen = s.lastIndexOf(')');
return new String[] {
s.substring(0, indexOfLastOpenParen),
s.substring(indexOfLastOpenParen + 1, indexOfLastCloseParen),
s.substring(indexOfLastCloseParen + 1)
};
}
public static void main(String args[]) throws Exception {
String input[] = {
"Xbox 360 (black) Elite Console 120GB (Mason City Illinois ) $200",
"$200 2013 North Trail Camper (RT 202. Manchester, Maine) $224/mo.",
"Snowmobile Bike trailers (Winthrop / Augusta) $40 Monthly",
"\"Great Xmas Gift\" XBox 360 Guitar Hero (Springfied)"
};
Pattern p = Pattern.compile("\\(([^\\)]+)\\)");
for (String s : input) {
System.out.println(Arrays.asList(splitParens(s)));
}
// =>
// [Xbox 360 (black) Elite Console 120GB , Mason City Illinois , $200]
// [$200 2013 North Trail Camper , RT 202. Manchester, Maine, $224/mo.]
// [Snowmobile Bike trailers , Winthrop / Augusta, $40 Monthly]
// ["Great Xmas Gift" XBox 360 Guitar Hero , Springfied, ]
}
当然,需要进行更多错误检查(例如,如果没有(
或)
会怎样?)。
答案 3 :(得分:0)
如果您确定总会有3个组,则此表达式将起作用:
(。*)\((。*)\)(。*)
你可以在这里自己尝试一下:
http://www.regexplanet.com/cookbook/ahJzfnJlZ2V4cGxhbmV0LWhyZHNyDgsSBlJlY2lwZRiU8y0M/index.html