Reg ex部分失败

时间:2018-03-20 14:23:35

标签: python regex string python-2.7 grouping

请耐心等待我,因为我可能无法解释这一点。

我有一个简单的正则表达式:

^(The\s)?(cat\s)?(sat\s)?(on\s)?(the\s)?(mat\.)?

文本

The cat sat on the mat.

成功通过。乌拉!

然而,我所追求的是一种找出正则表达式失败的群体的方法。 例如:

The cat sat on the mat # fails on group 6 (no period)
The cat sat on teh mat. # fails on group 5 (teh instead of the)
The kat sat on the mat. # fails on group 2 (kat instead of cat)

后一个例子在其他方面很好,除了那一组失败。我的问题是:在Python中是否有一种方法可以确定该字符串是否会在逐个组的基础上获得成功 - 而不必在每个组中创建正则表达式的迭代?

regex101 now with added cats

1 个答案:

答案 0 :(得分:0)

如果您只想知道第一次失败的位置,可以使用re.findall()

import re

regex = r'^(The\s)?(cat\s)?(sat\s)?(on\s)?(the\s)?(mat\.)?'
text = ''The cat sat on teh mat.'

re.findall(regex, text)
# [('The ', 'cat ', 'sat ', 'on ', '', '')]

所以你可以通过这样做找出第一次失败的索引:

re.findall(regex, text)[0].index('')
# 4

(注意如果你的正则表达式中有重叠匹配,回溯或其他更不寻常的模式,这种方法可能没用。)