如何在 Java 中提取第一个字母字符,例如在字符串"ABD123EZ13我应该得到"ABD"应用正则表达式后,这可能吗,我搜索了一段时间,没有找到任何东西。
我发现这个正则表达式:
String firstThreeCharacters = str.replaceAll("(?i)^[^a-z]*([a-z])[^a-z]*([a-z])[^a-z]*([a-z]).*$", "$1$2$3")
提取前 n 个 caracters,但它不检查第 n 个 caracter 是否按字母顺序排列。
其他示例:
"AAAA" => "AAAA">
"1231" => ">
"_abvbv" => ">
"abd_12df" => "abd">
您可以使用
String result = s.replaceFirst("(?s)\P{L}.*", "");
查看正则表达式演示
详
(?s)
- 一个Pattern.DOTALL
修饰符,用于使.
匹配换行符\P{L}
- 除 Unicode 字母以外的任何字符.*
- 任何 0+ 字符,直到字符串的末尾。
您不需要replaceAll
因为只有 1 次更换操作,replaceFirst
很好。
如果只需要处理 ASCII 字母,请将\P{L}
替换为仅匹配 ASCII 字母以外的任何字符的\P{Alpha}
。
对于仅匹配字符串开头的 1 个或多个字母的^p{L}+
或^p{Alpha}+
模式,匹配方法可能最简单:
String s = "abd_12df";
Pattern pattern = Pattern.compile("^\p{L}+"); // or just Pattern.compile("^[a-zA-Z]+") to get the first one or more ASCII letters
Matcher matcher = pattern.matcher(s);
if (matcher.find()){
System.out.println(matcher.group(0));
}
请参阅Java演示。