2017-12-06 8 views
0

括弧内の文字を検索と置換:私は括弧内の単語を検索し、交換する必要が私は、文字列の種類持って

String text = "(plum) some other words, [apple], another words {pear}."; 

を、ブラケット自体を交換しないでください。

私が書く場合:

text = text.replaceAll("(\\(|\\[|\\{).*?(\\)|\\]|\\})", "fruit"); 

私が手:

fruit some other words, fruit, another words fruit. 

だから、ブラケットは果物と去っていきましたが、私はそれらを維持する必要があります。


所望の出力:ここ

(fruit) some other words, [fruit], another words {fruit}. 
+0

_desired_の出力で質問を明確にすることはできますか? – rmlan

+0

text = text.replaceAll( "\\(| \\ [| \\ {)。*?(\\)| \\] | \\})"、 "\\(fruit \\)"); –

+0

下記の私の答えを試してみてください。 – prsvr

答えて

1

があなたの正規表現です:

(?<=[({\[\(])[A-Za-z]*(?=[}\]\)]) 

テストここ:Javaでそれを使用するためには

https://regex101.com/

、追加することを覚えていますecondのバックスラッシュ:

(?<=[({\\[\\(])[A-Za-z]*(?=[}\\]\\)]) 

これは、[これらのいずれかが先行0以上の文字(大文字または小文字)に一致{(及びこれらのいずれかが続きます]})。

あなたが括弧の間に少なくとも1つの文字を持たせたい場合は、単に次のように「+」と「*」を置き換えます

(?<=[({\[\(])[A-Za-z]+(?=[}\]\)]) 
+0

言語は 'javascript'ではなく' java'です – Drakonoved

+0

これはJavaです。正規表現のバックスラッシュをエスケープするには、2番目のバックスラッシュを追加するだけです。 –

+0

https://regex101.com/r/CGizZW/1 - これは動作します。 – Drakonoved

1

GCPからブラケットを除外するためにルック先読みを使用し、尻を見てどのように示しました。一致部分。しかし、あなたはまた、それらを一致し、グループをキャプチャして、あなたの置換文字列でそれらを参照することができます。

text.replaceAll("([\\(\\[\\{]).*?([\\)\\]\\}])", "$1fruit$2"); 

はまた、あなたが文字グループ[]|論理和を置き換えることに注意してください。

関連する問題