0

これを理解するのに苦労しているので、助けを求めます。取引は次のとおりです。

String str = "02-EST-WHATEVER-099-00.dwg";
String newStr = str.replaceAll("([^-_\\.]+-[^-_\\.]+-[^-_\\.]+-[^-_\\.]+-)[^-_\\.]+(\\.[^-_\\.]+)", "$1$2");

上記のコードのブロックは次のようになります02-EST-WHATEVER-099-.dwg(拡張子の直前の最後の「00」を削除)。素晴らしい、それが私に必要なものです!

ただし、上記で使用した正規表現はその場で作成する必要があります(削除するフィールドは別の位置にある可能性があります)。そこで、いくつかのコードを使用してRegEx文字列を作成しました(宣言したばかりの場合の結果は次のようになります)。

String regexRemoveRev = "([^-_\\.]+-[^-_\\.]+-[^-_\\.]+-[^-_\\.]+-)[^-_\\.]+(\\.[^-_\\.]+)";

今、私が得た場合out.print(regexRemoveRev)、私は得ます([^-_\.]+-[^-_\.]+-[^-_\.]+-[^-_\.]+-)[^-_\.]+(\.[^-_\.]+)(単一の円記号に注意してください)。

そして、もう一度試してみると、replaceAll機能しません。

String str = "02-EST-WHATEVER-099-00.dwg";
String newStr = str.replaceAll(regexRemoveRev, "$1$2");

だから私はそれが単一のバックスラッシュのせいである可能性があると思い、2つだけではなく4つでregexRemoveRevを宣言しようとしました。

String regexRemoveRev = "([^-_\\\\.]+-[^-_\\\\.]+-[^-_\\\\.]+-[^-_\\\\.]+-)[^-_\\\\.]+(\\\\.[^-_\\\\.]+)";

の出力out.print(regexRemoveRev)は、予想どおり、正規表現のダブルバックスラッシュバージョンです。

([^-_\\.]+-[^-_\\.]+-[^-_\\.]+-[^-_\\.]+-)[^-_\\.]+(\\.[^-_\\.]+)

しかし、置換はまだ機能しません!

どうすればこれで自分のやりたいことができるようになりますか?

4

1 に答える 1

1

私は短いプログラムを書いたばかりですが、どちらの場合もここで機能します。

public class StringTest 
{  

    public static void main(String[] args) 
    {  
        String str = "02-EST-WHATEVER-099-00.dwg";

        String newStr = str.replaceAll("([^-_\\.]+-[^-_\\.]+-[^-_\\.]+-[^-_\\.]+-)[^-_\\.]+(\\.[^-_\\.]+)", "$1$2");

        String regexRemoveRev = "([^-_\\.]+-[^-_\\.]+-[^-_\\.]+-[^-_\\.]+-)[^-_\\.]+(\\.[^-_\\.]+)";

        String newStr1 = str.replaceAll(regexRemoveRev, "$1$2");

        System.out.println("newStr: "+newStr);
        System.out.println("regexRemoveRev: "+regexRemoveRev);
        System.out.println("newStr: "+newStr1);

    }  
} 

上からの出力:

newStr:02-EST-WHATEVER-099-.dwg
regexRemoveRev:([^- 。]+-[^-。]+-[^- 。]+-[^-。]+-)[^- 。] + (。[^-。] +)
newStr:02-EST-WHATEVER-099-.dwg

なぜうまくいかないのかわかりません!! またはそれはあなたが求めている何か他のものであり、私は間違っていました

于 2012-12-20T14:25:14.133 に答える