@zhangyu756897669
2017-09-11T15:13:55.000000Z
字数 2059
阅读 866
zxcvbnm,./管理复杂的正则表达式
python官方文档
phoneRegex = re.compile(r'((\d{3}|\(\d{3}\))?(\s|-|\.)?\d{3}(\s|-|\.)\d{4}
(\s*(ext|x|ext.)\s*\d{2,5})?)')
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)
如果要使用re.VERBOSE在正则表达式中写入注释,而且还要使用re.IGNORECASE忽略大小写,该怎么办?不幸的是,re.compile()函数只需要一个值作为第二个参数。您可以通过使用管道字符(|)组合re.IGNORECASE,re.DOTALL和re.VERBOSE变量来解决此限制,在此上下文中称为按位或运算符。
因此,如果您想要一个不区分大小写的正则表达式,并且包含匹配点字符的换行符,则将形成如下所示的re.compile()调用:
someRegexValue = re.compile('foo', re.IGNORECASE | re.DOTALL)
someRegexValue = re.compile('foo', re.IGNORECASE | re.DOTALL | re.VERBOSE)
假设你有一个无聊的任务,找到一个长的网页或文档中的每个电话号码和电子邮件地址。如果您手动浏览页面,您可能会最终搜索很长一段时间。但是,如果您有一个程序可以在剪贴板中搜索电话号码和电子邮件地址的文本,您可以简单地按CTRL-A选择所有文本,按CTRL-C将其复制到剪贴板,然后运行程序。它可以只用电话号码和电子邮件地址替换剪贴板上的文本。
每当你处理一个新的项目时,都可能很容易潜入编写代码。但是,通常情况下,最好退后一步,考虑更大的图景。我建议先制定一个高级别的计划,以便您的程序需要做什么。不要考虑实际的代码
例如,您的手机和电子邮件地址提取器将需要执行以下操作:
现在,您可以开始考虑如何在代码中工作。代码将需要执行以下操作:
该列表就像项目的路线图。在编写代码时,您可以单独关注这些步骤。每一步都是相当可管理的,并且表达了你已经知道如何在Python中做的事情。
#! 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)
# 创建电子邮件正则表达式。
# 在剪贴板文本中查找匹配。
# 将结果复制到剪贴板