python - 使用正则表达式获取拆分版本号的最佳方法

标签 python regex

我有这个字符串(它是文件的一部分):

{
    return array(
        'major'     => '1',
        'minor'     => '9',
        'revision'  => '1',
        'patch'     => '1',
        'stability' => '',
        'number'    => '',
    );
}

我需要从中形成一个正确的版本号,在本例中为“1.9.1.1”。我已经编写了这样做的代码,但我想知道是否有更好、更漂亮的解决方案,或者需要更少代码的解决方案。我一直在考虑使用一个更复杂的正则表达式来返回版本号的所有部分,但我无法弄清楚如何,并且返回一个像“1911”这样的匹配项可能会导致比它的值(value)更多的麻烦,当有两个 -涉及的数字,例如“1.10.1.1”。在这种情况下,不可能知道在哪里拆分“11011”,因为它也可能是“11.0.1.1”或“1.1.0.11”。

这是我得到的(Python 代码):

        result = []
        result.append(re.search("'major'\\s+=>\\s+'(\\d+)'", text))
        result.append(re.search("'minor'\\s+=>\\s+'(\\d+)'", text))
        result.append(re.search("'revision'\\s+=>\\s+'(\\d+)'", text))
        result.append(re.search("'patch'\\s+=>\\s+'(\\d+)'", text))

        str = ""
        for res in result:
            if res:
                str += res.group(1) + "."

        return str[:-1]

最佳答案

您可以使用正则表达式,通过 re.findall 从连续的数组元素中捕获所有数值,然后使用 连接捕获的数字。:

import re
s = """{
    return array(
        'major'     => '1',
        'minor'     => '9',
        'revision'  => '1',
        'patch'     => '1',
        'stability' => '',
        'number'    => '',
    );
}
"""
ptn = r"return\s+array\s*\(\s*'major'\s*=>\s*'(\d*)',\s*'minor'\s*=>\s*'(\d*)',\s*\s*'revision'\s*=>\s*'(\d*)',\s*\s*'patch'\s*=>\s*'(\d*)"
print (".".join(*re.findall(ptn, s)))

参见 IDEONE demo

关于python - 使用正则表达式获取拆分版本号的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32817755/

相关文章:

Python OpenCV 3 : how to use cv2. CV_COMP_HELLINGER

替换文本中大于5位的数字

mysql - Laravel 5.1 的正则表达式和准备好的语句占位符的问号不明确

c# - 正则表达式匹配模式加上字符串的其余部分,直到下一个点、逗号或空格

python - 如何使用 FFMPEG 选择文件的保存位置

python - 我无法使用 ctypes 访问 C++ 类属性

python - Tkinter Python 图像错误

python - 在 python 中将年/季度日期格式更改为上一个时期

regex - Perl 正则表达式替换?

java - 我有返回类型屏蔽信用卡,我需要从中查找卡类型