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

誰かがなぜこれが機能しないのかを教えてくれ、それを行う適切な方法を提案できれば、それは素晴らしいことです. ありがとう。

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 に答える