正则表达式java:用于提取第一个字母字符的正则表达式

正则表达式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”

如何提取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”

“1231=>”

“\u abvbv”=>”

“abd_12df”=>“abd”

您可以使用

String result = s.replaceFirst("(?s)\\P{L}.*", "");

详细信息

  • (?s)
    -一种
    模式。DOTALL
    修改器,用于使
    匹配换行符
  • \\P{L}
    -除Unicode字母以外的任何字符
  • *
    -任何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它在我的网站上记录了一些信息,不记得那些…我因为我应该从那里开始;)