用于清理电话号码的正则表达式

用于清理电话号码的正则表达式

我正在尝试编写一个使用 sed 的脚本,并获取一个文本文件,其中包含区号为 301 的电话号码,后跟 209( 3012093934,(301)2093935,(301)209-3936 )。我必须删除分隔区号和号码的空格、破折号、括号。然后我必须将正确的数字写入另一个文件;正确的号码是指以区号 301 开头、后跟 209 以及正好 4 位数字的号码。

所以我的正则表达式是这样的,但似乎无法正常工作:

sed -n 's/(^301[\- ]*)/(209)/([0-9][0-9][0-9][0-9]$\)/p'

有人可以帮忙吗?提前致谢!!!

答案1

删除所有非数字字符,然后删除未按预期开头的行,最后删除非 10 个字符的行:

sed -e 's/[^0-9]//g' -e '/^301209/!d' -e '/^.\{10\}$/!d'

答案2

我首先使用删除不需要的字符tr,然后使用过滤grep

tr -d '() -'|grep '301209[0-9][0-9][0-9][0-9]$'

答案3

sed -n 's/.*\(301\).*\(209\).*\([0-9]\{4\}\)/\1\2\3/w foobar'

这将删除之前的所有字符301(以说明(309)),以及零次或多次出现的空格,并且在忽略任何非数字字符后,)其后的301空格恰好为四位数字。209输出写入到foobar.

答案4

sed -ne '/^ *\(+1\)\{0,1\} *(\{0,1\} *301 *)\{0,1\} *209 *-\{0,1\}\( *[0-9]\)\{4\} *$/s/[^0-9]*//gp'

相关内容