4

テキストの一部を置換する必要がありますが、その部分文字列が「<」と「>」の間に含まれていない場合のみです。

たとえば、次のテキストがある場合

<text color='blue'>My jeans are red</text>
<text color='red'>I am wearing a red t-shirt</text>
<text color='yellow'>I like red fruits</text>

「red」という単語を別の単語に置き換えたいのですが、「<」と「>」の間に含まれる単語を置き換えずに、そのテキスト内の単語を置き換えるにはどうすればよいですか? そのための正規表現を書き込もうとしましたが、成功しませんでした...

私が考えたばかげた方法は、すべてのテキストを分析し(文字ごとに)、 <...> の内側にあるか外側にあるかを確認し、外側にある場合にのみテキストの出現を置き換えることです...あるべきだと思いますよりスマートに!

4

4 に答える 4

1

これでよろしいですか?

一行で置換したいだけの場合:

final String s = "<text color='red'>I am wearing a red t-shirt</color>";
        System.out.println(s.replaceAll("(?<=>)(.*?)red", "$1blue"));

印刷します

<text color='red'>I am wearing a blue t-shirt</color>

複数行の場合:

final String s = "<text color='red'>I am wearing a red t-shirt</color>\n<text color='red'>You are wearing a red T-shirt</color>";
        System.out.println(s.replaceAll("(?m)^(.*?)(?<=>)([^>]*?)red", "$1$2blue"));

出力:

<text color='red'>I am wearing a blue t-shirt</color>
<text color='red'>You are wearing a blue T-shirt</color>
于 2013-02-06T12:43:07.637 に答える
0

サポート文字列配列をもう少し長く使用して、< ... >他のテキストではなく、開始タグと終了タグの間の文字列のみを置き換えます。

        String input ="<text color='red'>I am wearing a red t-shirt</color>";
        String [] end = null;
        String [] start = input.split("<");
        if (start!=null && start.length>0)
            for (int i=0; i<start.length;i++){
                end = start[i].split(">");
            }
        if (end!=null && end.length>0)
            for (int k=0; k<end.length;k++){
                input.replace(end[k], end[k].replace("red", "blue"));
            }
于 2013-02-06T12:43:45.077 に答える
0

「>」が続かない「赤」は置き換えます。その後、'<' と '>' のペアをチェックします。

String xml = "<text color='blue'>My jeans are red</text> <text color='red'>I am wearing a red t-shirt</text>red";
xml = xml.replaceAll("red(?=([^>]*<[^>]*?>)*[^<|>]*$)", "blue");
System.out.println(xml);

結果は次のとおりです。

<text color='blue'>My jeans are blue</text> <text color='red'>I am wearing a blue t-shirt</text>
于 2013-02-06T16:58:22.747 に答える
-1
Text=Text.replace(" red ", " blue ");
Text=Text.replace(" red<"," blue<");
Text=Text.replace(" red.", " blue.");
于 2013-02-06T23:20:23.200 に答える