正则表达式搜索是否保证返回第一个匹配?

时间:2014-05-28 08:27:06

标签: python regex

我正在寻找一种方法来返回字符串中给定正则表达式的第一个匹配项。看起来re.search正是我正在寻找的方法。

但是,文档没有明确说明是否保证从搜索方法返回第一个匹配项。

文档声称该方法“扫描字符串”,这表明它是从字符串的开头那样做的。

但是我需要一些强有力的论据。仅仅测试在cat1中找到cat1cat2是不够的。

最好的是对官方文档或实施的暗示。

3 个答案:

答案 0 :(得分:5)

我不想阅读re.search的代码,因为它有很多。但是,如果我们查看re.sub的代码,我们会看到它使用re.search,而re.sub 保证会替换最左边的模式。因此,re.search必须返回它。

来自_sre.c的相关代码(评论取代冗长的无关代码)

static PyObject*
pattern_subx(PatternObject* self, PyObject* ptemplate, PyObject* string,
             Py_ssize_t count, Py_ssize_t subn)
{
    // init stuff...
    while (!count || n < count) {

        state_reset(&state);

        state.ptr = state.start;

        status = sre_search(&state, PatternObject_GetCode(self));
        // Do the replacement...

修改

感谢@Veedrac打开issuedocumentation已明确说明

  

扫描字符串,查找常规的第一个位置   表达式模式生成匹配项,并返回相应的匹配项   对象

答案 1 :(得分:3)

是的 - re.search将返回最早的(&#34;首先开始&#34;)可能的匹配。

(可能不是 匹配的最长/最佳匹配。)

答案 2 :(得分:3)

由于我99.999%肯定第一个意图,我改变了一个位置&#39;到了第一个位置&#39;在doc。的re.search条目中。