我正在寻找一种方法来返回字符串中给定正则表达式的第一个匹配项。看起来re.search
正是我正在寻找的方法。
但是,文档没有明确说明是否保证从搜索方法返回第一个匹配项。
文档声称该方法“扫描字符串”,这表明它是从字符串的开头那样做的。
但是我需要一些强有力的论据。仅仅测试在cat1
中找到cat1cat2
是不够的。
最好的是对官方文档或实施的暗示。
答案 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打开issue,documentation已明确说明
扫描字符串,查找常规的第一个位置 表达式模式生成匹配项,并返回相应的匹配项 对象
答案 1 :(得分:3)
是的 - re.search
将返回最早的(&#34;首先开始&#34;)可能的匹配。
(可能不是 匹配的最长/最佳匹配。)
答案 2 :(得分:3)
由于我99.999%肯定第一个意图,我改变了一个位置&#39;到了第一个位置&#39;在doc。的re.search条目中。