python - 如何创建包含变量和注释的正则表达式?

标签 python regex windows

我想创建一个包含注释和变量的正则表达式。我以为我会像这样拆分字符串,但它不起作用:

import re

regex = re.compile(r'''
        ^(sm\d{5}-[a-z]+-\d{2})          # study number''' + 
        doctype               +      r'''# document
        v(\d+)-(\d+)                     # version number
        \.pdf$                           # pdf extension
        ''', re.VERBOSE) 

最佳答案

将您的正则表达式模式分成多个字符串,然后使用 "".join() 将它们组合成一个字符串,就像这样

import re
pattern = "".join([
    "^(sm\d{5}-[a-z]+-\d{2})",  # study number
    doctype,  # document
    "v(\d+)-(\d+)",  # version number
    "\.pdf$",  # pdf extension
])
regex = re.compile(pattern, re.VERBOSE)

为避免需要注释,您可以为正则表达式的每个部分使用描述性变量名称。这样做,将行定位字符与正则表达式的“业务逻辑”分开也可能有意义,以使这些变量更易于重用。

study_number_pattern = "(sm\d{5}-[a-z]+-\d{2})"
version_number_pattern = "v(\d+)-(\d+)"
pdf_extension_pattern = "\.pdf"
pattern = "".join([
    "^",
    study_number_pattern,
    doctype,
    version_number_pattern,
    pdf_extension_pattern,
    "$"
])
regex = re.compile(pattern, re.VERBOSE)

关于python - 如何创建包含变量和注释的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55426896/

相关文章:

python - matplotlib: "TypeError: Image data can not convert to float"看起来像一个精细矩阵

Python 使用 *args 和默认参数

javascript - 为什么 string.split() 对于正则表达式的行为不同?

ruby - SCP 未成功完成 (1) 尝试使用 ruby​​ 从 Windows 上传到 Ubuntu 时出错

ruby - 在 Windows 上安装 dm-types。 (Win7 x64)

windows - 通过 VirtualBox Windows 7 访问 OSX Tomcat

python - 如何在Python中将csv文件映射到另一个文件?

python - 在 Windows 上成功 shutil.rmtree 后,os.mkdir 可能会因 PermissionError 而失败

javascript - Eloquent Javascript 正则表达式示例 : Why Is Exec Returning A Two-Item Array?

regex - 如何匹配 'a' 或 '^'