sre_yield与正则表达式有关

联合创作 · 2023-09-29 08:33

sre_yield 是用于生成正则表达式匹配结果的 Python 模块,并尽可能的匹配到所有有效值。它采用了解析正则表达式的方式,所以你可以得到一个更加精确的结果,而不仅仅只是分散的字符串。

sre_yield 通常都无法处理反向引用、lookarounds 正则表达式,除此之外,还有在这几种情况下也无法处理;

  • 重复的最大值取决于系统-CPython的sre模块有一个特殊的值,该值被视为无限值(取决于构建,值为 2**16-1 或 2**32-1)。在sre_yield中,将其视为文字,而不是无限,因此(在 2**16-1 平台上):

    >>> len(sre_yield.AllStrings(' a * ')[ - 1 ])
    65535
    >>> 进口重
    >>> len(re.match('。* '' a '  *  100000).group(0))
    100000
  • re 模块的文档说,“正则表达式模式字符串可能不包含空字节”,然而这似乎做工精细。

  • Order 不取决于 greediness。

  • 正则表达式被视为完全匹配。

代码示例:

>>> import random
>>> v = sre_yield.AllStrings('[abc]{1,4}')
>>> len(v)
120

# Now random.choice(v) has a 3/120 chance of choosing a single letter.
>>> random.seed(1)
>>> sum([1 if len(random.choice(v)) == 1 else 0 for _ in range(120)])
3

# xeger(v) has ~25% chance of choosing a single letter, because the length
and match are chosen independently.
> from rstr import xeger
> sum([1 if len(xeger('[abc]{1,4}')) == 1 else 0 for _ in range(120)])
26
浏览 3
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报