我想删除与正则表达式匹配的字符串的一部分。
我正在尝试制作一个电视节目组织节目,我希望在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());
如果有人能告诉我为什么这不起作用并提出正确的方法,那就太好了。感谢。
答案 0 :(得分:5)
matches()
尝试再次匹配整个字符串模式。如果您想在字符串中找到您的模式,请使用find()
,find()
将搜索字符串中的下一个匹配项。
您的代码可能完全相同:
if(m.find())
return name.substring(0, m.end());
答案 1 :(得分: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
答案 2 :(得分: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();
}
希望这有帮助