2016-09-06 24 views
0

У меня проблема в Java при попытке удалить символы из конца строки. Это теперь стало типичной проблемой совпадения шаблонов, которую я не могу решить.Как Regex заменить символы в конце строки

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

Смежные вопросы