Skip to main content

用于以分层方式编写可读正则表达式的实用函数

项目描述

reagex(来自“可读正则表达式” )的目标是提出一种以可读方式编写具有许多捕获组的复杂正则表达式的方法。

目前,它只包含一个非常简单的函数(称为reagex)和一个实用函数,但是任何对编写可读模式有用的函数都是受欢迎的。

注意:发布这个小得离谱的项目是熟悉 python 打包、DevOps 工具和开源项目发布背后的整个工作流程的借口。项目模板是使用https://github.com/ionelmc/cookiecutter-pylibrary/生成 的,这对于“单一功能项目”来说显然是一种过度杀伤力。

  • 免费软件:BSD 2-Clause License

用法

核心函数reagex只是 str.format 的一个包装器,它以相同的方式工作。看例子

import re
from reagex import reagex

# A sloppy pattern for an italian address (just to show how it works)
pattern = reagex(
    '{_address}, {postcode} {city} {province}',
    # groups starting with "_" are non-capturing
    _address = reagex(
        '{street} {number}',
        street = '(via|contrada|c/da|c[.]da|piazza|p[.]za|p[.]zza) [a-zA-Z]+',
        number = 'snc|[0-9]+'
    ),
    postcode = '[0-9]{5}',
    city = '[A-Za-z]+',
    province = '[A-Z]{2}'
)

matcher = re.compile(pattern)
match = matcher.fullmatch('via Roma 123, 12345 Napoli NA')
print(match.groupdict())

# prints:
#   {'city': 'Napoli',
#    'number': '123',
#    'postcode': '12345',
#    'province': 'NA',
#    'street': 'via Roma'}

以“_”开头的组是非捕获的。其余的都是命名的捕获组。

为什么不…

为什么不只使用 re.VERBOSE?

我认为reagex更容易编写和阅读:

  • 使用 reagex,您首先根据组来描述模式的结构, 然后为每个组提供一个模式;使用 re.VERBOSE 您必须在它们必须匹配的确切位置定义组:要获得模式的高级结构,您可能需要在同一缩进级别读取多行

  • 使用 re.VERBOSE 你只需要写一个大字符串;使用 reagex,您可以获得语法高亮,这有助于提高可读性

  • 空格不需要任何特殊处理

  • “{group_name}”比“(?P<group_name>)”更好

安装

pip install reagex

文档

https://python-reagex.readthedocs.io/

发展

可能的改进:

  1. 对{group_name:format_spec}中的format_spec进行一些有意义的使用

  2. 添加实用功能,如重复,以帮助以可读的方式编写常见模式

测试

要运行所有测试:

tox

请注意,要组合来自所有tox环境的覆盖率数据,请运行:

视窗

设置 PYTEST_ADDOPTS=--cov-append
tox

其他

PYTEST_ADDOPTS=--cov-append tox

变更日志

0.1.2 (2018-12-16)

  • 修复示例中的小错误(在 PyPI 中显示,因此需要发布来更新 PyPI 页面)。

0.1.1 (2018-12-12)

  • 对文档的小修复和修改

0.1.0 (2018-12-08)

  • PyPI 上的第一个版本。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

reagex-0.1.2.tar.gz (18.8 kB 查看哈希)

已上传 source

内置分布

reagex-0.1.2-py2.py3-none-any.whl (5.6 kB 查看哈希)

已上传 py2 py3