使用正则表达式

时间:2014-05-12 00:39:32

标签: java regex

我有一个包含字母数字术语的字符串,如下所示。我想将字母提取到数组中。我写了以下代码。

String pro = "1a1a2aa3aaa4aaaa15aaaaa6aaaaaa";
String[] p = pro.split("^([0-9].*)$");

Pattern pattern = Pattern.compile("([0-9].*)([A-z].*)");
Matcher matcher = pattern.matcher(pro.toString());
while (matcher.find())
{
    System.out.println(matcher.group());
}
for(String s: p)
{
    System.out.println(s);
}
System.out.println("End");

输出:

1a1a2aa3aaa4aaaa15aaaaa6aaaaaa
ENd

我甚至尝试使用基于正则表达式的split,但即便如此也是如此。我认为我的正则表达是错误的。我希望输出包含数组中的所有字母。

array[] = {'a', 'a', 'aa', 'aaa', 'aaaa', 'aaaaa', 'aaaaaa'}

2 个答案:

答案 0 :(得分:3)

除了字母字符外,您可以使用以下split(s)的内容。

String s = "1a1a2aa3aaa4aaaa15aaaaa6aaaaaa";
String[] parts = s.split("[^a-zA-Z]+")

for (String m: parts) {
    System.out.println(m);
}

使用Matcher方法,您可以执行以下操作。

String s  = "1a1a2aa3aaa4aaaa15aaaaa6aaaaaa";

Pattern p = Pattern.compile("[a-zA-Z]+");
Matcher m = p.matcher(s);

List<String> matches = new ArrayList<String>();

while (m.find()) {
  matches.add(m.group());
}

System.out.println(matches); // => [a, a, aa, aaa, aaaa, aaaaa, aaaaaa]

答案 1 :(得分:0)

如果您只想要字母字符,那么使用此表达式会更有意义:/([a-zA-Z]+)/g

使用^$不是您在表达式中可能需要的内容,因为您想要的是匹配所有可能的匹配/g

这是一个在线演示:

http://regex101.com/r/fI1eB8