【问题标题】:Remove part of String following regex match in Java在Java中的正则表达式匹配后删除部分字符串
【发布时间】:2012-06-01 10:54:23
【问题描述】:

我想删除与我的正则表达式匹配的字符串的一部分。

我正在尝试制作一个电视节目组织程序,并且我想以 SXEXXX 的形式切断名称中的任何内容,格式为 SXEXXX,其中 X 是一个数字。

我相当容易地掌握了正则表达式模型来创建应该正确匹配的“[Ss]\d\d[Ee]\d\d”。

我想使用 Matcher 方法 end() 来获取匹配字符串中的最后一个索引,但它似乎没有像我认为的那样工作。

Pattern p = Pattern.compile("[Ss]\\d\\d[Ee]\\d\\d");
Matcher m = p.matcher(name);

if(m.matches())
    return name.substring(0, m.end());

如果有人能告诉我为什么这不起作用并提出正确的方法,那就太好了。谢谢。

【问题讨论】:

    标签: java regex string match


    【解决方案1】:

    这应该可以工作

    .*[Ss]\d\d[Ee]\d\d
    

    在java中(我生疏了)这将是

    String ResultString = null;
    
    Pattern regex = Pattern.compile(".*[Ss]\\d\\d[Ee]\\d\\d");
    Matcher regexMatcher = regex.matcher("Title S11E11Blah");
    if (regexMatcher.find()) {
        ResultString = regexMatcher.group();
    } 
    

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      matches() 尝试再次匹配整个字符串的模式。如果要在字符串中查找模式,请使用find(),find() 将在字符串中搜索下一个匹配项。

      您的代码可能完全相同:

      if(m.find())
          return name.substring(0, m.end());
      

      【讨论】:

      • 谢谢,我又遇到了一个简单的问题。
      【解决方案3】:

      matches 匹配整个字符串,试试find()

      您也可以捕获名称:

      String name = "a movie S01E02 with some stuff";
      Pattern p = Pattern.compile("(.*[Ss]\\d\\d[Ee]\\d\\d)");
      Matcher m = p.matcher(name);
      
      if (m.find())
          System.out.println(m.group());
      else
          System.out.println("No match");
      

      将捕获并打印:

      电影 S01E02

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-25
        • 2010-09-15
        • 1970-01-01
        • 2021-03-30
        • 1970-01-01
        • 2012-11-25
        • 2013-10-14
        相关资源
        最近更新 更多