如何在正则表达式中对文本进行分组,但不使其出现在组的搜索结果中?

2024-06-07 07:03:24 发布

您现在位置:Python中文网/ 问答频道 /正文

举个例子,假设我有这些测试字符串和正则表达式:

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')

Tags: 字符串ingitalpharenonefor例子