python字符串偏移量_字符串掩码和带正则表达式的偏移量

前缀匹配选项

通过使用一个可变前缀regex跳过第一个offset单词,并将单词三元组捕获到一个组中,就可以实现这一点。在

所以像这样:import re

s = "The quick, brown fox jumps over the lazy dog."

print re.search(r'(?:\w+\W*){0}((?:\w+\W*){3})', s).group(1)

# The quick, brown

print re.search(r'(?:\w+\W*){1}((?:\w+\W*){3})', s).group(1)

# quick, brown fox

print re.search(r'(?:\w+\W*){2}((?:\w+\W*){3})', s).group(1)

# brown fox jumps

让我们来看看模式:

^{pr2}$

这就是它所说的:匹配2个单词,然后捕捉到第1组中,匹配3个单词。在

(?:...)构造用于对重复进行分组,但它们不是捕获的。在

参考文献

关于“单词”模式的注释

应该说,\w+\W*对于“word”模式来说是一个糟糕的选择,如下例所示:import re

s = "nothing"

print re.search(r'(\w+\W*){3}', s).group()

# nothing

没有3个单词,但是regex仍然能够匹配,因为\W*允许空字符串匹配。在

也许更好的模式是:\w+(?:\W+|$)

也就是说,一个\w+,后跟一个\W+或字符串$的结尾。在

捕捉前瞻选项

正如Kobi在评论中建议的那样,这个选项更简单,因为您只有一个静态模式。它使用findall来捕获所有匹配项(see on ideone.com):import re

s = "The quick, brown fox jumps over the lazy dog."

triplets = re.findall(r"\b(?=((?:\w+(?:\W+|$)){3}))", s)

print triplets

# ['The quick, brown ', 'quick, brown fox ', 'brown fox jumps ',

# 'fox jumps over ', 'jumps over the ', 'over the lazy ', 'the lazy dog.']

print triplets[3]

# fox jumps over

它的工作原理是匹配零宽度的单词边界\b,使用lookahead捕捉组1中的3个“单词”。在______lookahead______

/ ___"word"__ \

/ / \ \

\b(?=((?:\w+(?:\W+|$)){3}))

\___________________/

group 1

参考文献

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值