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

标签 python regex

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

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

文档声称该方法“扫描整个字符串”,这表明它从字符串的开头开始扫描。

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

最好是官方文档或实现的提示。

最佳答案

我不想通读 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已澄清声明

Scan through string looking for the first location where the regular expression pattern produces a match, and return a corresponding match object.

关于python - 正则表达式搜索是否保证返回第一个匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23906400/

相关文章:

Python:允许重复正则表达式,但逗号之间只允许有 1 个连字符

regex - Perl 中的命令行跨多行

正则表达式匹配两个字符串之间所有字符的最后一次出现

regex - 如何在 Linux 中指定进程名称中只获取进程 ID?

python - 在python中一行打印动态字符串

python - Pandas 用 loc 打印出行

python - 在 Sklearn 中留下一个

python - 使用 django-reversion 显示模型实例的更改日志历史记录

python - BlobServiceClient.from_connection_string(connect_str) 错误

javascript - 了解匹配多个字符串的正则表达式中\b 的用法