Java 在一些字符之间提取一组字符

Java 在一些字符之间提取一组字符,java,regex,substring,Java,Regex,Substring,我有一个字符串email=John.Mcgee。r2d2@hitachi.com 如何使用正则表达式编写java代码来实现r2d2? 我使用了这个,但在eclipse上出现了一个错误 String email = John.Mcgee.r2d2@hitachi.com Pattern pattern = Pattern.compile(".(.*)\@"); Matcher matcher = patter.matcher for (Strimatcher.find()){ S

我有一个字符串
email=John.Mcgee。r2d2@hitachi.com

如何使用正则表达式编写java代码来实现r2d2? 我使用了这个,但在eclipse上出现了一个错误

String email = John.Mcgee.r2d2@hitachi.com
Pattern pattern = Pattern.compile(".(.*)\@");
Matcher matcher = patter.matcher      
for (Strimatcher.find()){
   System.out.println(matcher.group(1));
} 

无需设置模式,只需使用此正则表达式
*\.([^\.]+)@.
,这意味着获取组
([^\.]+)
(匹配一个或多个字符,点除外),该组介于点
\.
@

email = email.replaceAll(".*\\.([^\\.]+)@.*", "$1");
输出

r2d2


如果要使用模式,则必须使用此正则表达式
\\。([^\\.]+)@

String email = "John.Mcgee.r2d2@hitachi.com";
Pattern pattern = Pattern.compile("\\.([^\\.]+)@");
Matcher matcher = pattern.matcher(email);
if (matcher.find()) {
    System.out.println(matcher.group(1));// Output : r2d2
}

您可以使用拆分的另一个解决方案:

String[] split = email.replaceAll("@.*", "").split("\\.");
email = split[split.length - 1];// Output : r2d2

注意:

  • java中的字符串应该在双引号之间。r2d2@hitachi.com“
  • 在Java中不需要转义
    @
    ,但必须用双斜杠转义点。
  • for循环没有像(Strimatcher.find()){那样的语法,可能您的意思是
    while

要在可能的多个点序列中的最后一个点后匹配,请请求捕获的序列不包含点:

(?<=[.])([^.]*)(?=@)

(?不确定您发布的代码是否正确。但我会根据它的外观重新编写:

    String email = John.Mcgee.r2d2@hitachi.com
    Pattern pattern = Pattern.compile(".(.*)\@");
    Matcher matcher = pattern.matcher(email);
    int count = 0;
    while(matcher.find()) {
       count++;
       System.out.println(matcher.group(count));
   } 
但我想你只是想要这样的东西:

String email = John.Mcgee.r2d2@hitachi.com
Pattern pattern = Pattern.compile(".(.*)\@");
Matcher matcher = pattern.matcher(email);
if(matcher.find()){
       System.out.println(matcher.group(1));
}

Strimatcher.find
肯定不会编译,因为包含
Matcher
的变量是
Matcher
。谢谢。非常有用。我喜欢“全部替换”路线,但如果我不知道特殊字符是什么呢。它的特殊字符R2D2特殊字符。在这种情况下,我如何获得R2D2?谢谢lot@Diwas什么您的意思是,所有3种解决方案都返回
r2d2
或点与@之间的任何字符,例如,如果您使用另一个字符串
firstname。lastname@gmail.come
所有三种解决方案都返回
lastname
我需要从字符串中获取R2D2,如下所示:字符串email=john.mcgee(特殊字符)R2D2(特殊字符)@hitachi.com如果我不知道特殊角色是什么,我如何获得r2d2?Thanks@Diwas好的,两个特殊字符之间的预期字符是什么?只有字母和数字?是的,只有字母和数字。