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

时间:2018-01-19 16:47:27

标签: 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()){
   System.out.println(matcher.group(1));
} 

3 个答案:

答案 0 :(得分:1)

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

(?<=[.])([^.]*)(?=@)
  • (?<=[.])表示&#34;前面有一个点&#34;
  • (?=@)表示&#34;后跟@符号&#34;

请注意,由于点.是元字符,因此需要使用\(对于Java字符串文字加倍)或使用方括号进行转义。

Demo.

答案 1 :(得分:0)

不需要模式,你需要replaceAll这个正则表达式.*\.([^\.]+)@.*这意味着获得组([^\.]+)(匹配一个或多个字符,除了点)之间的点{{1} }和\.

@

输出

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

regex demo

如果你想使用Pattern,那么你必须使用这个正则表达式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
}

注意:

  • java中的字符串应该在双引号String[] split = email.replaceAll("@.*", "").split("\\."); email = split[split.length - 1];// Output : r2d2
  • 之间
  • 您不需要在Java中转义"John.Mcgee.r2d2@hitachi.com",但您必须使用双斜杠@
  • 来逃避点
  • for for循环没有像\\.那样的语法,也许你的意思是for (Strimatcher.find()){

答案 2 :(得分:0)

不确定您是否发布了正确的代码。我会根据它应该是什么样子重写它:

    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));
}