正则表达式之制作地址取址器

Posted 怪兽宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式之制作地址取址器相关的知识,希望对你有一定的参考价值。

  • 正则表达式很好,如果您需要匹配的文本模式很简单。但匹配复杂的文本模式可能需要长而复杂的正则表达式。您可以通过告诉re.compile()函数来忽略正则表达式字符串中的空格和注释来减轻这一点。可以通过将变量re.VERBOSE作为第二个参数传递给re.compile()来启用此“详细模式”。
    而不是像这样的难以阅读的正则表达式:
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)
  • 请注意上一个示例如何使用三重引用语法(’’’)来创建多行字符串,以便您可以将正则表达式定义扩展到多行,从而使其更加清晰。

组合reignignecase,re.DOTALL和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)

项目:电话号码和电子邮件地址提取器

  • 每当你处理一个新的项目时,都可能很容易潜入编写代码。但是,通常情况下,最好退后一步,考虑更大的图景。我建议先制定一个高级别的计划,以便您的程序需要做什么。不要考虑实际的代码

    • 将文本从剪贴板中取出。
    • 查找文字中的所有电话号码和电子邮件地址。
    • 将它们粘贴到剪贴板上。
  • 现在,您可以开始考虑如何在代码中工作。代码将需要执行以下操作:

    • 使用pyperclip模块复制和粘贴字符串。
    • 创建两个正则表达式,一个用于匹配电话号码,另一个用于匹配电子邮件地址。
    • 查找所有匹配,而不仅仅是两个正则表达式的匹配。
    • 将匹配的字符串整齐地格式化为单个字符串以进行粘贴。
    • 如果文本中没有匹配,显示某些信息.
  • 该列表就像项目的路线图。在编写代码时,您可以单独关注这些步骤。每一步都是相当可管理的,并且表达了你已经知道如何在Python中做的事情。

步骤1:创建电话号码的正则表达式

#! 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)

#  创建电子邮件正则表达式。

#  在剪贴板文本中查找匹配。

#  将结果复制到剪贴板
  • 电话号码以可选的区号开始,所以区号代码组后跟一个问号。由于区域代码只能是三位数(即\ d {3})或括号内的三位数字(即\(\ d {3} \))),因此您应该有一个连接这些部分的管道。您可以添加正则表达式注释
  • 电话号码分隔符可以是空格(\ s),连字符( - )或句点(。),所以这些部分也应连接起来。正则表达式的下几个部分是简单的:三位数,后跟另一个分隔符,后跟四位数。最后一部分是可选的扩展名,由任意数量的空格组成,后跟ext,x或ext,后跟两位数到五位数。