? 匹配零次或一次前面的分组
* 匹配零次或多次前面的分组
+ 匹配一次或多次前面的分组
{n} 匹配n次前面的分组
{n,} 匹配n次或更多次前面的分组
{,m} 匹配零次到m次前面的分组
{n,m} 匹配至少n次,至多m次前面的分组
{n,m}?或*?或+? 对前面的分组进行非贪心匹配
^spam 意味着字符必须以spam开始
spam$ 意味着字符必须以spam结束
. 匹配所有的字符,换行符除外
\d,\w和\s 分别匹配数字,单词和空格
\D,\W和\S 分别匹配出数字,单词和空格外的所有字符
[abc] 匹配方括号内的任意字符。(例如abc)
[^abc] 匹配不在方括号内的任意字符
常用的字符分类
\d 0~9的任意数字
\D 除0~9外的任意数字
\w 任何字母,数字,下划线字符(可以认为是匹配“单词”字符)
\W 除字母,数字或下划线字符(可以认为是匹配“单词”字符)
\s 空格,制表符和换行符(可以认为是匹配“空白”字符)
\S 除空格,制表符和换行符以外的任何字符
--------摘自《Python编程快速上手-让繁琐的功能自动化》
书上有一个验证邮箱和电话号码的例子,一并贴上来
#添加复制和正则表达式的模块 import pyperclip,re # 创建电话的正则表达式 phoneRegex = re,compile(r'''( (\d{3)|\(\d{3}\))? (\s|-|\.)? (\d{3}) (\s|-|\.) (\d{4}) (\s*(ext|x|ext\.)\s*(\d{2,5}))? )''',re.VERBOSE) # 创建邮箱的正则表达式 emailRegex = re.compile(r'''( [a-zA-Z0-9._%+-]+ @ [a-zA-Z0-9.-]+ (\.[a-zA-Z]{2,4}) )''',re.VERBOSE) # 在粘贴板中找到相关的文本数据 text = str(pyperclip.paste) matches = [] for groups in phoneRegex.findall(text): phoneNum = '-'.join('-').join([groups[1],groups[3],groups[5]]) if groups[8] != "": phoneNum += "x"+ groups[8] matches.append(phoneNum) for groups in emailRegex.findall(text): matches.append(groups[0]) # 将整理好的字符输出 if(len(matches) > 0 ): pyperclip.copy('n'.join(matches)) print('Copied to cli[board:') print('\n'.join(matches)) else: print('no phone numbers or email addresses found')