2016-09-06 6 views
0

文字列の最後から文字を削除しようとするとJavaで問題が発生します。これは私が解決できない一般的なパターンマッチの問題になっています。文字列の末尾にある文字を正規表現に置き換える方法

PROBLEM =文字列の末尾にあるプラス、マイナス、スペース(空白を気にしない)をすべて削除します。

Pattern myRegex; 
Matcher myMatch; 
String myPattern = ""; 
String myString = ""; 
String myResult = ""; 

myString="surname; forename--+ + --++ " 
myPattern="^(.*)[-+ ]*$" 
//expected result = "surname; forename" 
myRegex = Pattern.compile(myPattern); 
myMatch = myRegex.matcher(myString); 

if (myMatch.find()) { 
    myResult = myMatch.group(1); 
} else { 
    myResult = myString; 
} 

私はこの仕事を得ることができる唯一の方法は、その後、私は正しい答えを得るために、結果を逆に、文字列を逆にし、パターンマッチを逆にすることによってです!以下のパターンでは

+2

代わりにこの正規表現 "^(。*?)[ - +] * $"を試してください。私は '?'を非貪欲なものにするために '?'を追加しました。 – redneb

+0

おそらく 'myString.replaceAll(" [ - +] + $ "、" ")' – Thilo

+0

@rednebのようなものです:最初は貪欲な '。*'が文字列全体を食べます。 – Thilo

答えて

0

^(.*)[-+ ]*$ 

... .*は貪欲な試合です。つまり、可能な限り多くの文字が一致し、パターン全体が一致するようになります。

?を追加することで、非欲張りに変更する必要があります。

^(.*?)[-+ ]*$ 
+0

ありがとう - 私は今、私の人生の終わりに失った月を取り戻すことができます! 私はこの問題を読んでいたときに貪欲な試合に気づいたが、明らかに私に登録しなかった。 この特定の置換のためのより簡単な方法を望む人には... myString.replaceAll( "(\\ + | \\ - |)* $"、 "") – James

関連する問題