我有一个版本号的字符串。我想从这段代码中读取版本号,这样我就可以将它与我正在使用的其他代码进行比较。我在下面完成了代码,但无法使其正常工作,有人能看到问题吗?
print results
r = re.compile(r'(version\s*\s*)(\S+)')
for l in results:
m1 = r.match(l)
if m1:
ID=map(int,m1.group(2).split("."))
l = r.sub(r'\g<1>' + '.'.join(['%s' % (v) for v in ID]), l)
print ID
结果变量是:
Name Info Type Call version 1.0.40.437 Fri Oct 2 10:54:35 BST 2009
我这样做是因为我需要将ID中的数字分成组,因为我需要将ID中的第3个数字与另一个文件中ID中的第三个数字进行比较。
以下答案很有用,但我使用它的方式是读取一个文件并取出所有数字并将它们放入一个列表中,这样我所要做的就是比较列表的两个数字。很抱歉,如果问题不明确但我不希望版本号是字符串。
好的,我对下面回答的代码做了一些更改。代码如下:
version = re.compile('version\s+([\d.]+)\s+')
ID = version.search(results)
if ID:
value = ID.group(1).split('.')[2]
self.assertEqual(BUILD_ID[2], int(value))
这不会创建我想要的列表,但它允许我比较2个值。
感谢您的帮助。
答案 0 :(得分:3)
为何选择regexp?我应该使用split('')并使用'version'旁边的值,或者更简单:
print results.split(' ')[5]
如果必须使用正则表达式,请尝试:
rx = re.compile('version\s+([\d.]+)\s+')
rxx = rx.search(results)
if rxx:
print rxx.group(1)
答案 1 :(得分:2)
这是一种非正则表达方式
>>> s="Name Info Type Call version 1.0.40.437 Fri Oct 2 10:54:35 BST 2009".split()
>>> for n,i in enumerate(s):
... if "version" in i:
... print s[n+1]
...
1.0.40.437
>>>
答案 2 :(得分:2)
>>> r = re.compile(r'version (\S*)')
>>> r.findall(results)
['1.0.40.437']
非正则表达方式
>>> m=results.split()
>>> m[m.index('version')+1]
'1.0.40.437'
答案 3 :(得分:0)
>>> import re
>>> results = "Name Info Type Call version 1.0.40.437 Fri Oct 2 10:54:35 BST 2009"
>>> m = re.search("version ([^ ]+)", results)
>>> if m:
... version = m.group(1)
... print "matched, found:", version
... else:
... print "didn't find a version"
...
matched, found: 1.0.40.437
答案 4 :(得分:0)
我可以发现一些事情:
你说results
是一个字符串,但你正在迭代它 - 所以l
每次都是一个字符。
re.match
仅匹配字符串的开头。请改用re.search
。
答案 5 :(得分:0)
下面的答案很有用,但我使用它的方式是读取一个文件并取出所有数字并将它们放入一个列表中,这样我所要做的就是比较列表中的两个数字。
我将假设版本格式是固定的(即。version.major.minor.revision
)。
reVersion = re.compile( 'version\s+((((\d+)\.(\d+))\.(\d+)).(\S+))\s+', re.I )
for result in results:
versionMatch = reVersion.match( result )
if versionMatch:
version = versionMatch.groups()
print( version[0] ) # 1.0.40.437 full version
print( version[1] ) # 1.0.40 version.major.minor - no revision
print( version[2] ) # 1.0 version.major
print( version[3] ) # 1 version
print( version[4] ) # 0 major
print( version[5] ) # 40 minor
print( version[6] ) # 437 revision