欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

LeetCode 193. Valid Phone Numbers

程序员文章站 2024-01-16 13:19:28
分析 难度 易 来源 https://leetcode.com/problems/valid-phone-numbers/ 题目 Given a text file file.txt that contains list of phone numbers (one per line), write ......

分析

难度 易

来源

题目

given a text file file.txt that contains list of phone numbers (one per line), write a one liner bash script to print all valid phone numbers.

you may assume that a valid phone number must appear in one of the following two formats: (xxx) xxx-xxxx or xxx-xxx-xxxx. (x means a digit)

you may also assume each line in the text file must not contain leading or trailing white spaces.

example:

assume that file.txt has the following content:

987-123-4567
123 456 7890
(123) 456-7890

your script should output the following valid phone numbers:

987-123-4567
(123) 456-7890
解答

https://leetcode.com/problems/valid-phone-numbers/discuss/55478/grep-e-solution-with-detailed-explanation-good-for-those-new-to-regex

1 grep -e '\(^[0-9]\{3\}-[0-9]\{3\}-[0-9]\{4\}$\)' -e '\(^([0-9]\{3\})[ ]\{1\}[0-9]\{3\}-\([0-9]\{4\}\)$\)'  file.txt
  1. in bash, we use \ to escape next one trailing character;
  2. ^ is used to denote the beginning of a line
  3. $ is used to denote the end of a line
  4. {m} is used to denote to match exactly m times of the previous occurence/regex
  5. (...) is used to group pattern/regex together

back to this problem: it requires us to match two patterns, for better readability, i used -e and separate the two patterns into two regexes, the first one matches this case: xxx-xxx-xxxx and the second one matches this case: (xxx) xxx-xxxx

加上-p(使用perl的正则引擎)即可过滤出目标数据
1 grep -p '^(\d{3}-|\(\d{3}\) )\d{3}-\d{4}$' file.txt
注意上方的空格 
1 grep '^(\d{3}-|\(\d{3}\)[ ]{1})\d{3}-\d{4}$'  file.txt
这里使用[ ]{1}表示一个空格