Python中常见的正则表达式符号

时间:2022-11-02 19:48:25

 ?  匹配零次或一次前面的分组

 *   匹配零次或多次前面的分组

 +  匹配一次或多次前面的分组

 {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编程快速上手-让繁琐的功能自动化》

书上有一个验证邮箱和电话号码的例子,一并贴上来

Python中常见的正则表达式符号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')
代码示例