举个例子,假设我有这些测试字符串和正则表达式:
git_describes = ['v1.0.0-beta-1-g5d1a5a2', 'v1.0.0-g5d1a5a2', 'v1.0.0-alpha-1-g5d1a5a2', 'v1.0.0-1-g5d1a5a2']
git_regex = r'v([0-9]+.[0-9]+.[0-9]+)(-(beta|alpha))?(-([0-9]+))?-g([a-f0-9]+)'
for g in git_describes:
print re.search(git_regex, g).groups()
其输出为:
('1.0.0', '-beta', 'beta', '-1', '1', '5d1a5a2')
('1.0.0', None, None, None, None, '5d1a5a2')
('1.0.0', '-alpha', 'alpha', '-1', '1', '5d1a5a2')
('1.0.0', None, None, '-1', '1', '5d1a5a2')
我使用条件(-(beta|alpha))?
对破折号进行分组,但我对在最终分组结果中看到破折号不感兴趣
删除元组结果的第2个和第4个条目很简单,但是如何编写正则表达式,使它们不包含在第一位呢?i、 e
('1.0.0', 'beta', '1', '5d1a5a2')
('1.0.0', None, None, '5d1a5a2')
('1.0.0', 'alpha', '1', '5d1a5a2')
('1.0.0', None, '1', '5d1a5a2')
您需要的是一个非捕获组。而不是
(...)
写(?:...)
,因此组仍将用于匹配,但不会添加到结果中有关详细信息,请参见python's official regex documentation
相关问题 更多 >
编程相关推荐