如何在Python中实现Lua的前沿模式?

如何在Python正则表达式中实现Lua的前沿模式

%f[set]匹配一个空字符串,这个空字符串在任何一点都满足这样的条件:下一个字符属于集合(set),同时前一个字符不属于这个集合(set)

点赞
用户240490
用户240490

你可能在寻找正则表达式中的“前瞻”模式。例如:

import re

s = 'there is 1more 2go 3fold'
#
pat = re.compile('(?=[12])')
for m in pat.finditer(s):
    print(m.start())

输出结果为:

9
15

文档中可以看出:

(?=...) 匹配紧接着...所匹配的但不消耗字符串的字符,这被称作前瞻条件。例如,Isaac (?=Asimov)只匹配前面跟着'Asimov'的'Isaac '。

与评论中的一些说法相反,至少在我理解的情况下,前瞻表达式并不仅限于“固定长度的字符串”。例如:

s = 'there is 1Fmore 1Gother 21go 3fold 3slambam'

pat = re.compile('(?=(1F|2|3sl.[mn]))')
for m in pat.finditer(s):
    print(m.start(), repr(s[m.start():]))

输出结果为:

9 '1Fmore 1Gother 21go 3fold 3slambam'
24 '21go 3fold 3slambam'
35 '3slambam'

在这个例子中,前瞻是一个相当宽泛的子模式,有着不同的长度和嵌入的通配符和自己的子表达式。

2017-07-17 03:54:52