我有这个字符串(它是文件的一部分):
{
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/