Regex работает со сбоями в данных координат - PullRequest
0 голосов
/ 30 марта 2019

У меня есть регулярное выражение, которое должно убрать все символы, не являющиеся числами в строке, кроме пробела.

Вход выглядит примерно так:

{“23 882 91 317”, “55 672 871 437”, “230 12 435 907”, “320 32 855 107”}

Выход должен выглядеть следующим образом:

23 882 91 317 55 672 871 437 230 12 435 907 320 32 855 107

Вместо Iвижу вывод:

23 882 91 317 5 672 871 437 30 12 435 907 20 32 855 107

Он удаляет числовой символ сразу после , ", и у меня осталось:

5 instead of 55
30 instead of 230
20 instead of 320

Я не эксперт вРегулярное выражение так хотело видеть, может ли кто-то указать на то, что не так в коде.Вот как выглядит регулярное выражение прямо сейчас.

String processedString = s.replaceAll("[^a-zA-Z0-9\\s].", "");

1 Ответ

2 голосов
/ 30 марта 2019

Ваше регулярное выражение [^a-zA-Z0-9\\s]. должно соответствовать ровно двум символам, чтобы произошла замена. Первый символ - это не алфавитно-цифровой непробельный символ, поэтому в вашей строке они есть,

{“23 882 91 317”, “55 672 871 437”, “230 12 435 907”, “320 32 855 107”}
^              ^  ^ and so on

И следующий символ в вашем регулярном выражении - ., который будет соответствовать любому символу. Следовательно, ваше регулярное выражение удаляет символы в парах, где первый символ является тем, который вы намеревались, но второй символ иногда удачно сопоставляется с символом, который вы хотите удалить, но иногда . соответствует цифре, к сожалению, из-за которой он удаляет цифра. Посмотрите эту демонстрацию для того, что соответствует вашему регулярному выражению.

Демо

Вы должны изменить это . на +, чтобы удалить один или несколько символов и использовать это регулярное выражение,

[^a-zA-Z0-9\s]+

Демонстрация правильной замены только нежелательных символов

Ваш код Java,

String s = "{“23 882 91 317”, “55 672 871 437”, “230 12 435 907”, “320 32 855 107”}";
String processedString = s.replaceAll("[^a-zA-Z0-9\\s]+", "");
System.out.println(processedString);

Печатает следующее без удаления цифр,

23 882 91 317 55 672 871 437 230 12 435 907 320 32 855 107
...