在Java中删除与正则表达式匹配的部分字符串

4

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

我正在尝试制作一款电视节目组织程序,我想要剪掉名称中在形式为SXXEXX的季节和集数标记之后的任何内容,其中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());

如果有人能告诉我为什么这样不起作用,并建议一个合适的方法来解决它,那就太好了。谢谢。
3个回答

6

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

您的代码可能非常相似:

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

谢谢,只是又遇到了一个简单的问题,让我有点卡住了。 - Ryan Jackman

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


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

希望这能帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接