Парсировать подписанный номер из строки

У меня есть строка как:

"-------5548481818fgh7hf8ghf----fgh54f4578"

Я не хочу анализировать, используя Pattern и Matcher. У меня есть код:

string.replaceAll("regex", ""));

Как сделать regex исключить все символы, кроме "-", чтобы получить строку вроде:

-554848181878544578

3 ответа

Решение

Вы можете использовать это отрицательное регулярное выражение:

String s = "-------5548481818fgh7hf8ghf----fgh54f4578";

String r = s.replaceAll("(?!^[-+])\\D+", "");
//=> -554848181878544578

(?!^-)\D заменит все нецифровые символы, кроме дефиса при запуске.

RegEx Demo

Это будет работать

String Str = new String("-------5548481818fgh7hf8ghf----fgh54f4578-");
String tmp = Str.replaceAll("([-+])+|([^\\d])","$1").replaceAll("\\d[+-](\\d|$)","");
System.out.println(tmp);

Ideone Demo

Альтернатива: возьмите наоборот, вместо того, чтобы заменить отрицательный. Кажется, вы выбрали произвольное удаление символов, которые вам не нужны, вместо того, чтобы захватывать нужные символы. Пример в JavaScript:

s = "-------5548481818fgh7hf8ghf----fgh54f4578"
s = '-' + s.match(/[0-9]+/g).join('')
// "-554848181878544578"
Другие вопросы по тегам