2016-09-06 631 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