grep с regex для номера телефона

Я хотел бы получить номера телефона из файла. Я знаю, что числа имеют различные формы, я могу обработать для единственного, но не знаю, как получить универсальную форму regex. Например,

  1. xxx-xxx-xxxx

  2. (xxx)xxx-xxxx

  3. xxx xxx xxxx

  4. xxxxxxxxxx

Я могу только обработать 1, 2, и 4 вместе

grep '[0-9]\{3\}[ -]\?[0-9]\{3\}[ -]\?[0-9]\{4\}' file

Есть ли какой-либо единственный regex, может обработать все эти четыре формы?

16
задан Alan Moore 16 February 2010 в 00:53
поделиться

5 ответов

grep '\(([0-9]\{3\})\|[0-9]\{3\}\)[ -]\?[0-9]\{3\}[ -]\?[0-9]\{4\}' file

Пояснение:

([0-9]\{3\}) три цифры внутри скобок

\| или

[0-9]\{3\} три цифры не внутри скобок

... с группирующими скобками - \(...\) - вокруг чередования, чтобы остальная часть регекса вела себя одинаково независимо от того, какая альтернатива совпадает.

18
ответ дан 30 November 2019 в 17:39
поделиться

Я получил следующее:

debian:tmp$ cat p.txt
333-444-5555
(333)333-6666
123 456 7890
1234567890
debian:tmp$ egrep '\(?[0-9]{3}[ )-]?[0-9]{3}[ -]?[0-9]{4}' p.txt
333-444-5555
(333)333-6666
123 456 7890
1234567890
debian:tmp$ egrep --version
GNU grep 2.5.3

Copyright (C) 1988, 1992-2002, 2004, 2005  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

debian:tmp$
-2
ответ дан 30 November 2019 в 17:39
поделиться

Вы можете просто ИЛИ ( | ) ваши регулярные выражения вместе - так они тоже будут более читабельны!

2
ответ дан 30 November 2019 в 17:39
поделиться

Моя первая мысль заключается в том, что вам будет легче увидеть, совпадает ли ваш номер кандидата с одним из четырех регулярных выражений. Это будет легче разработать / отладить, особенно когда / когда вам придется обрабатывать дополнительные форматы в будущем.

1
ответ дан 30 November 2019 в 17:39
поделиться
grep -P '[0-9]{3}-[0-9]{3}-[0-9]{3}|[0-9]{3}\ [0-9]{3}\ [0-9]{3}|[0-9]{9}|\([0-9]{3}\)[0-9]{3}-[0-9]{3}'
1
ответ дан 30 November 2019 в 17:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: