1

我想获取包含字母数字字段的字符串的第一个单词

例如。

字符串可以是'abc123abc'或'abc-123abc'我只想要第一个'abc'有没有办法在没有for循环的情况下得到它(我想用正则表达式来做,但我对正则表达式不太了解)

实际上字符串模式就像

[A-Za-z]{2,5}[-]{0,1}[0-9]{1,15}[A-Za-z]{0,15}

我的目标是得到第一个字

4

5 回答 5

4

将要捕获的表达式部分包装在捕获组中,然后使用group(1)匹配器访问它:

([A-Za-z]{2,5})-?[0-9]{1,15}[A-Za-z]{0,15}

第一组将捕获所有内容,直到可选的破折号:

Pattern p = Pattern.compile("([A-Za-z]{2,5})-?[0-9]{1,15}[A-Za-z]{0,15}");
Matcher m = p.matcher("abc123abc");
if (m.find()) {
    System.out.println(m.group(1));
}

以上打印abc链接到ideone)。

于 2012-12-12T14:54:16.360 回答
3

试试看

System.out.println("abc-123abc".split("[-\\d]+")[0]);

输出

abc
于 2012-12-12T14:55:28.567 回答
1
^[A-Za-z]+

将匹配字符串开头的 ASCII 字母。那是你需要的吗?

于 2012-12-12T14:54:18.690 回答
0

您可以获得匹配的文本^[A-Za-z]{2,5}。这将匹配所有的第一个字母。

于 2012-12-12T14:56:24.773 回答
0
String word = "abc-123abc".replaceFirst("[^a-zA-Z].*$", "");

这将删除第一个非 az 字符之后的所有内容。您还可以将替换与捕获组一起使用。

String word = "abc-123abc".replaceFirst("^([a-zA-Z]+).*$", "$1");

String.replaceFirst()

于 2012-12-12T15:08:34.740 回答