Парсировать подписанный номер из строки
У меня есть строка как:
"-------5548481818fgh7hf8ghf----fgh54f4578"
Я не хочу анализировать, используя Pattern и Matcher. У меня есть код:
string.replaceAll("regex", ""));
Как сделать regex
исключить все символы, кроме "-", чтобы получить строку вроде:
-554848181878544578
3 ответа
Решение
Вы можете использовать это отрицательное регулярное выражение:
String s = "-------5548481818fgh7hf8ghf----fgh54f4578";
String r = s.replaceAll("(?!^[-+])\\D+", "");
//=> -554848181878544578
(?!^-)\D
заменит все нецифровые символы, кроме дефиса при запуске.
Это будет работать
String Str = new String("-------5548481818fgh7hf8ghf----fgh54f4578-");
String tmp = Str.replaceAll("([-+])+|([^\\d])","$1").replaceAll("\\d[+-](\\d|$)","");
System.out.println(tmp);
Альтернатива: возьмите наоборот, вместо того, чтобы заменить отрицательный. Кажется, вы выбрали произвольное удаление символов, которые вам не нужны, вместо того, чтобы захватывать нужные символы. Пример в JavaScript:
s = "-------5548481818fgh7hf8ghf----fgh54f4578"
s = '-' + s.match(/[0-9]+/g).join('')
// "-554848181878544578"