28-第1步_为电话号码创建一个正则表达式
第1步:为电话号码创建一个正则表达式
首先,你需要创建一个正则表达式来查找电话号码。创建一个新文件,输入以下代码,保存为phoneAndEmail.py:
#! python3
# phoneAndEmail.py - Finds phone numbers and email addresses on the clipboard.
import pyperclip, re
phoneRegex = re.compile(r'''(
(\d{3}|\(\d{3}\))? # area code
(\s|-|\.)? # separator
(\d{3}) # first 3 digits
(\s|-|\.) # separator
(\d{4}) # last 4 digits
(\s*(ext|x|ext.)\s*(\d{2,5}))? # extension
)''', re.VERBOSE)
# TODO: Create email regex.
# TODO: Find matches in clipboard text.
# TODO: Copy results to the clipboard.
TODO
注释仅仅是程序的框架。当编写真正的代码时,它们会被替换掉。
电话号码从一个“可选的”区号开始,所以区号分组跟着一个问号。因为区号可能只是3个数字(即 \d{3}
),或括号中的3个数字(即 \(\d{3}\)
),所以应该用管道符号连接这两部分。可以对这部分多行字符串加上正则表达式注释 # area code
,帮助你记忆 (\d{3}|(\d{3}\))?
要匹配的是什么。
电话号码分隔字符可以是空格( \s
)、短横线( -
)或句点( .
),所以这些部分也应该用管道符号连接。这个正则表达式接下来的几部分很简单:3个数字,另一个分隔符,然后是4个数字。最后的部分是可选的分机号,包括任意数目的空格,接着 ext
、 x
或 ext.
,再接着是2~5位数字。
注意: 很容易混淆包含带括号( )和转义括号(、)的分组的正则表达式。如果收到“missing ), unterminated subpattern”错误信息,请记住再次检查是否使用了正确的括号。