5

より大きな文字列内に" "と" "のペアを複数回含む可能性のあるJava文字列があります。{}

"My name is {name}. I am a {animal}. I like to {activity} whenever it rains."

など。これらのペアのすべてのインスタンスを削除するコードを作成しようとしています。

"My name is . I am a . I like to whenever it rains."

これらのペアは文字列内のどこにでも発生する可能性があり、まったく発生しない可能性があります。明らかに、ここではaが適切ですが、正しくString#replaceAll(someRegex, "")理解できないようです。someRegex

// My best attempt.
String stripped = toStrip.replaceAll("{*}", "");

何か案は?前もって感謝します。

4

3 に答える 3

9

に一致{させるには、エスケープする必要があります。正規表現では特別な意味があるためです。\\{したがって、 、およびが必要です\\}。または、それらを文字クラスで囲むこともできます。

そして、それらの間の何かを一致させるには、 を使用できます.*。Adot (.)は任意の文字に一致します。And*は量指定子であり、これは match を意味し0 or moreます。

したがって、正規表現は次のようになります。

\\{.*?\\}  

また: -

[{].*?[}]

ここでは、気が進まない量指定子を使用していることに注意してください - .*??末尾に注意してください。}この場合、最初まで一致させるために使用されます。.*の代わりにを使用すると、正規表現は最初から最後の まで.*?完全な文字列をカバーし、すべてを置き換えます。{}

また、特別な正規表現のメタ文字は、内部で使用しても特別な意味はありませcharacter class[]。そのため、そのように使用する場合はエスケープする必要はありません。したがって、2番目の正規表現。

それはとても簡単に思えますね。では、チュートリアルを行って について詳しく学びましょうRegular Expressionhttp://www.regular-expressions.info/tutorial.htmlから始めることができます

于 2012-12-26T16:26:06.097 に答える
1

\{\w*\}以下のように最も単純な正規表現を使用してみてください。

    String s  = "My name is {name}. I am a {animal}. I like to {activity} "+
                "whenever it rains.";
    System.out.println(s.replaceAll("\\{\\w*\\}", ""));

上記の正規表現は、{} で囲まれた単語文字をストライプ化します。特定の特殊文字を含めたい場合は\w、中括弧内に記載されているものと一緒に含めます。

于 2012-12-26T16:32:12.570 に答える
0

replaceAll("\\{.*?\\}", "")仕事をするべきです

String stripped = "My name is {name}. I am a {animal}. I like to {activity} whenever it rains.".replaceAll("\\{.*?\\}", "");
System.out.println(stripped);

版画My name is . I am a . I like to whenever it rains.

于 2012-12-26T16:27:20.503 に答える