正则表达式模式匹配器,如何存储其余的字符串

时间:2014-09-25 06:34:21

标签: java regex

字符串:美国(45)

使用模式匹配仅获取数值45

Java代码

ArrayList<String> portfolioCount = new ArrayList<String>();
String mainText = USA (45)
final Pattern p = Pattern.compile("\\((.*?)\\)");
final Matcher m = p.matcher(mainText);
m.find();           
portfolioCount.add(m.group(1));

将数值存储到arrayList中, 我的问题是如何将其余的字符串(即美国)存储到另一个数组列表

3 个答案:

答案 0 :(得分:1)

(.*?)\\s*\\((.*?)\\)

试试这个。抓住match1和match2。

参见演示。

http://regex101.com/r/qC9cH4/7

答案 1 :(得分:1)

只需捕获()中的数字之前的部分到另一个组

ArrayList<String> portfolioCount = new ArrayList<String>();
String mainText = "USA (45)";
final Pattern p = Pattern.compile("(\\S+)\\s+\\((.*?)\\)");
final Matcher m = p.matcher(mainText);
while(m.find()){           
portfolioCount.add(m.group(1));
portfolioCount.add(m.group(2));
System.out.println(portfolioCount);
}

<强>输出

[USA, 45]

要将国家/地区名称和计数存储在两个单独的列表中,

ArrayList<String> portfolioCount = new ArrayList<String>();
ArrayList<String> country = new ArrayList<String>();
String mainText = "USA (45)";
final Pattern p = Pattern.compile("(\\S+)\\s+\\((.*?)\\)");
final Matcher m = p.matcher(mainText);
while(m.find()){           
portfolioCount.add(m.group(1));
country.add(m.group(2));
System.out.println(portfolioCount);
System.out.println(country);
}

<强>输出:

[USA]
[45]

答案 2 :(得分:1)

您可以使用lookahead和lookbehind,以便不在匹配的组中包含括号:

ArrayList<String> countryCount = new ArrayList<String>();
ArrayList<String> portfolioCount = new ArrayList<String>();
String mainText = "USA (45)";
final Pattern p = Pattern.compile("(.*?)(?>\\()(\\d+)(?=\\)).*");
final Matcher m = p.matcher(mainText);
m.find();
countryCount.add(m.group(1)); //USA
portfolioCount.add(m.group(2)); //45