sre_yield與正則表達(dá)式有關(guān)
sre_yield 是用于生成正則表達(dá)式匹配結(jié)果的 Python 模塊,并盡可能的匹配到所有有效值。它采用了解析正則表達(dá)式的方式,所以你可以得到一個(gè)更加精確的結(jié)果,而不僅僅只是分散的字符串。
sre_yield 通常都無法處理反向引用、lookarounds 正則表達(dá)式,除此之外,還有在這幾種情況下也無法處理;
-
重復(fù)的最大值取決于系統(tǒng)-CPython的
sre模塊有一個(gè)特殊的值,該值被視為無限值(取決于構(gòu)建,值為 2**16-1 或 2**32-1)。在sre_yield中,將其視為文字,而不是無限,因此(在 2**16-1 平臺(tái)上):>>> len(sre_yield.AllStrings(' a * ')[ - 1 ]) 65535 >>> 進(jìn)口重 >>> len(re.match('。* ',' a ' * 100000).group(0)) 100000 -
該
re模塊的文檔說,“正則表達(dá)式模式字符串可能不包含空字節(jié)”,然而這似乎做工精細(xì)。 -
Order 不取決于 greediness。
-
正則表達(dá)式被視為完全匹配。
代碼示例:
>>> 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
評(píng)論
圖片
表情
