简体   繁体   中英

Remove part of String following regex match in Java

I want to remove a part of a string following what matches my regex.

I am trying to make a TV show organization program and I want to cut off anything in the name following the season and episode marker in the form SXXEXX where X is a digit.

I grasped the regex model fairly easily to create "[Ss]\\d\\d[Ee]\\d\\d" which should match properly.

I want to use the Matcher method end() to get the last index in the string of the match but it does not seem to be working as I think it should.

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

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

If someone could tell me why this doesn't work and suggest a proper way to do it, that would be great. Thanks.

matches() tries to match the whole string again the pattern. If you want to find your pattern within a string, use find() , find() will search for the next match in the string.

Your code could be quite the same:

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

matches matches the entire string, try find()

You could capture the name as well:

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

Will capture and print:

a movie S01E02

This should work

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

In java (I'm rusty) this will be

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

Hope this helps

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM