2017-11-16 2 views
1

私は変数name文字列が含まれており、このようなパターンは次のGroovyの文字列s持っている:私は\ dの+/{someInformation}削除しようとしているGroovy String.replaceを使用して、未知の数字を含む部分文字列を削除するにはどうすればよいですか?

name = "{someInformation}" 
s = "0/$name|2/{moreInformation}|3/$name" 

を| *から(それの両方のケースを)これはうまくいきません。\ d +/{someInformation} | *が一致する正しいパターンではないからです。

以下は動作しません:

s = s.replace ("\\d+/$name|", "") 

s.contains("\\d+/$name|")のでfalseを返します。しかし、私はしばらくの間、正規表現を手にしていましたが、私はそれを一致させることができないようです。それが見つけ、部品を取り外すことができるように私は私のString.replace正規表現の中に配置する必要があり何

、私は残っているすべては

s == "2/{moreInformation}" 
+1

明確ではありません。あなたは入出力のいくつかの例を挙げることができますか? – m0skit0

+1

'name 'とは何が関係していますか? –

+0

Groovy StringsとStringsと同じではないことがあるのか​​どうか疑問に思っています... – GLaDOS

答えて

2

あなたは、次の正規表現ベースのソリューションを使用することができるようであること:

def name = "{someInformation}" 
def s = "0/$name|2/{moreInformation}|3/$name" 
println(s) // => 0/{someInformation}|2/{moreInformation}|3/{someInformation} 
// => 0/{someInformation}|2/{moreInformation}|3/{someInformation} 
def pat = "\\|*\\d+/${java.util.regex.Pattern.quote(name)}\\|*" 
println(pat) // => \|*\d+/\Q{someInformation}\E\|* 
println(s.replaceAll(pat, "")) 
// => 2/{moreInformation} 

はここGroovy demo

generated regex demoある参照してください。 ${java.util.regex.Pattern.quote(name)}は、name変数内のすべての特殊正規表現メタキャラクタをエスケープして、正規表現エンジンによってリテラルシンボルとして扱われることに注意してください。

詳細

  • \|* - 0+ | 文字
  • \d+ - 1+数字
  • / - /チャー
  • \Q{someInformation}\E - リテラル{someInformation}サブ
  • \|* - 0 + | chars
+1

nice。私はPattern.quote ... TILについて聞いていなかった!驚くばかり!私は変数の中のそれらの "違法な"文字をどのようにエスケープするかと思いました。 – GLaDOS

関連する問題