4

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

我正在尝试制作一个电视节目组织程序,并且我想以 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());

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

4

3 回答 3

6

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

您的代码可能完全相同:

if(m.find())
    return name.substring(0, m.end());
于 2012-05-25T21:26:30.373 回答
4

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

于 2012-05-25T21:28:44.670 回答
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();
} 

希望这可以帮助

于 2012-05-25T21:25:47.067 回答