python - 非贪婪正则表达式不会终止

标签 python regex

我当前的正则表达式应该获取特定 PHP 函数的返回值(如果它是字符串)。

我的第一个正则表达式有效,但我知道它并不匹配所有情况,所以我想对其进行扩展。

这是第一个正则表达式:

"public function getVersion\\(\\)\\s*?{\\s*.*return\\s*'(.+)';"

这适用于:

public function getVersion() {
    return '1.0.0';
}

但不适用于函数名称和返回值之间有线条的情况:

public function getVersion() {
    # SomeComment
    some_function()
    return '1.0.0';
}

这是大修版本:

"public function getVersion\\(\\)\\s*?{(\\s|.)*?return\\s*'(.+)';"

我使用 (\s|.)* 将其更改为在返回之前匹配任意数量的字符或换行符?

但是,在实现之后,我发现搜索现在并没有终止。我不知道为什么会这样。即使没有找到结果,是否应该在到达搜索文本末尾后终止?谁能帮我解决这个问题吗?

最佳答案

您可以使用 re.DOTALL 参数进行换行。考虑一下:

import re

text = '''public function getVersion() {
    # SomeComment
    some_function()
    return '1.0.0';
}'''

regex_comp = re.compile("public function getVersion\\(\\)\\s*?{\\s*.*return\\s*'(.+)';", re.DOTALL)

print regex_comp.search(text).group(1)

关于python - 非贪婪正则表达式不会终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33075915/

相关文章:

python - 绘制 map : arrows disappear

java - 匹配多个通配符表达式的最短字符串

php - 正则表达式匹配,如果不是在单词之后

java - "Java not found"使用 tabula-py

python - sqlalchemy:上一行和下一行的id

python - 如何使用 python xarray 使用多维坐标对数据进行子集化?

python - 使用 CSV 和 glob 重命名文件

javascript - 按名称将文本替换为 JavaScript 属性的内容

javascript - 如何解决 JS 正则表达式在按键期间不起作用的问题

javascript - 帮助使用正则表达式