正则表达示例
题目描述:
使用正则表达从电脑的剪切板上的信息中找到“电话号码”和“邮箱地址”。并且将找到的结果返回给电脑额剪切板。
解答步骤:
- 导入需要使用到的模块,
re
和pyperclip
;- 其中,
pyperclip
为第三方模块,需要我们先进行安装。 - 在终端输入,
pip install pyperclip
然后回车即可。
- 其中,
- 使用
re
模块,创建两个正则表达式;- 第一个,用来匹配电话号码;
- 第二个用来匹配电子邮箱地址;
- 使用
pyperclip
模块,从剪切板获取信息; - 找出所有匹配的字符;
- 将找到的字符整理好,并显示结果,同时返回给电脑的剪切板;
- 如果,没有找到也显示相应的提示信息。
完整代码
#! 使用 Python 3.12 环境
# 导入 pyperclip 和 re 模块,分别是剪切板操作和正则表达式操作模块
import pyperclip, re
# 创建一个电话号码的正则表达式
phoneRegex = re.compile(r'''(
(\d{3}|\(\d{3}\)) # area code
(\s|-|\.)? # separator
(\d{8}) # last 4 digits
(\s*(/|ext|x|ext.)\s*(\d{2,5}))? # extension
)''', re.VERBOSE) # 增加 re.VERBOSE 选项,以便于阅读
# 创建一个邮箱的正则表达式
emailRegex = re.compile(r'''(
[a-zA-Z0-9._%+-]+ # username
@ # @ symbol
[a-zA-Z0-9.-]+ # domain name
(\.[a-zA-Z]{2,4}){1,2} # dot-something
)''', re.VERBOSE) # 增加 re.VERBOSE 选项,以便于阅读
# 使用第三方模块,通过剪切板获取文本
text = str(pyperclip.paste())
# 创建一个新的列表用来存储匹配结果
matches = []
for groups in phoneRegex.findall(text):
phoneNum = '-'.join([groups[1], groups[3]])
if groups[6] != '':
phoneNum += ' x' + groups[6]
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 clipboard:')
print('\n'.join(matches))
else:
print('No phone numbers or email addresses found.')