正则表达式java:用于提取第一个字母字符的正则表达式
如何提取Java中的第一个字母字符,例如在字符串“ABD123EZ13”上应用regex后,我应该得到“ABD”,这是否可能,我搜索了一会儿,没有找到任何东西 我发现这个正则表达式:正则表达式java:用于提取第一个字母字符的正则表达式,java,regex,string,Java,Regex,String,如何提取Java中的第一个字母字符,例如在字符串“ABD123EZ13”上应用regex后,我应该得到“ABD”,这是否可能,我搜索了一会儿,没有找到任何东西 我发现这个正则表达式: String firstThreeCharacters = str.replaceAll("(?i)^[^a-z]*([a-z])[^a-z]*([a-z])[^a-z]*([a-z]).*$", "$1$2$3") 提取前n个字符,但不检查第h个字符是否按字母顺序排列 其他例子: “AAAA”=>“AAAA”
String firstThreeCharacters = str.replaceAll("(?i)^[^a-z]*([a-z])[^a-z]*([a-z])[^a-z]*([a-z]).*$", "$1$2$3")
提取前n个字符,但不检查第h个字符是否按字母顺序排列
其他例子:
“AAAA”=>“AAAA”
“1231=>”
“\u abvbv”=>”
“abd_12df”=>“abd”您可以使用
String result = s.replaceFirst("(?s)\\P{L}.*", "");
见
详细信息
-一种(?s)
修改器,用于使模式。DOTALL
匹配换行符
-除Unicode字母以外的任何字符\\P{L}
-任何0+字符,直到字符串末尾*
replaceAll
,因为只有一个替换操作,replaceFirst
可以
如果只需要处理ASCII字母,请将其替换为只匹配ASCII字母以外的任何字符的\\p{L}
,替换为\\p{Alpha}
使用仅匹配字符串开头的一个或多个字母的^\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));
}
请参见。Maybe
s.replaceFirst(“\\p{L}.*”,”)
?@AxelH\p{L}
匹配任何Unicode字母。\p{L}
是相反的构造,它匹配任何非Unicode字母的字符。@abdenaceurlicheheb您可以使用^[a-zA-Z]获取字符串开头的所有字母+
谢谢,实际上我想知道如何调用这些函数来找到更多关于可能性的信息。您提到的Alpha
仅适用于ASCII,这并不是很详细,所以我想这是在某个地方记录的。EDIT:find a bit of info@AxelH它在我的网站上记录了一些信息,不记得那些…我因为我应该从那里开始;)