我想获取包含字母数字字段的字符串的第一个单词
例如。
字符串可以是'abc123abc'或'abc-123abc'我只想要第一个'abc'有没有办法在没有for循环的情况下得到它(我想用正则表达式来做,但我对正则表达式不太了解)
实际上字符串模式就像
[A-Za-z]{2,5}[-]{0,1}[0-9]{1,15}[A-Za-z]{0,15}
我的目标是得到第一个字
将要捕获的表达式部分包装在捕获组中,然后使用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)。
试试看
System.out.println("abc-123abc".split("[-\\d]+")[0]);
输出
abc
^[A-Za-z]+
将匹配字符串开头的 ASCII 字母。那是你需要的吗?
您可以获得匹配的文本^[A-Za-z]{2,5}
。这将匹配所有的第一个字母。
String word = "abc-123abc".replaceFirst("[^a-zA-Z].*$", "");
这将删除第一个非 az 字符之后的所有内容。您还可以将替换与捕获组一起使用。
String word = "abc-123abc".replaceFirst("^([a-zA-Z]+).*$", "$1");