2016-06-05 5 views
-2

Я в процессе изменения существующего регулярного выражения, чтобы соответствовать номерам кредитных карт. Иногда такие числа представлены следующим образом, которые разделяют числовые фрагменты с пробелами или тиреями следующим образом;REGEX удаляет пробелы или тире, если они находятся между цифрами

3756-4564-2323-3435 
3756 6432 3233 435 

Эти типы совпадений должны быть предварительно обработаны, чтобы удалить эти специальные символы. Обычно числовые фрагменты имеют от 3 до 4 цифр.

благодаря

+1

(http://mattgemmell.com/what-have-you-tried/)? Это очень просто. –

+0

Итак, вы хотели бы использовать замену Regex? [-] (\ d {4}) [-] (\ d {3,4}) [-] (\ (\ d {4}) 'для матча и '\ 1 \ 2 \ 3 \ 4' для замены должен сделать трюк – micsthepick

+0

Im sorry Ed, Im не очень хорошо при регулярном выражении. Оцените, можете ли вы помочь – user3148655

ответ

0

Как уже упоминалось @Ed, вы должны попытаться решить вещи по своему усмотрению, прежде чем просить для решения. В противном случае, не должно (\d{4})[ -](\(\d{4})[ -](\d{4})[ -](\d{3,4}) правильно соответствовать числу, сохраняя каждую часть в группах 1-4?

Если вам нужно обрабатывать номера, которые еще не имеют разделителей, просто сделайте их необязательными с квалификатором ?: (\d{4})[ -]?(\(\d{4})[ -]?(\d{4})[ -]?(\d{3,4}).

+0

Спасибо @mic. Мой плохой. Я использовал sed для замены 'sed -E 's/([0-9] {4}) [-] ([0-9] {4}) [-] ([0- 9] {4}) [-] ([0-9] {3,4})/\ 1 \ 2 \ 3 \ 4/g '* ', но как использовать его для повторного отображения всех совпадений в файле – user3148655

+0

@ user3148655 «Вы пробовали» глобальный флаг 'g',' sed -i 's/([0-9] {4}) [-] ([0-9] {4}) [-] ([0- 9] {4}) [-] ([0-9] {3,4})/\ 1 \ 2 \ 3 \ 4/g 'file.txt' должно работать нормально. – micsthepick

+0

да, это дает мне эту ошибку. 'sed: -e выражение # 1, char 67: неверная ссылка \ 4 on' s 'команда RHS' – user3148655

1

В Баш вы можете удалить все, что не цифры с: [? Что вы пробовали]

$ var="3756-4564-2323-3435" 
$ echo "${var//[^0-9]}" 
3756456423233435 
Смежные вопросы