Python 如何将正则表达式中的文本分组,而不将其显示在组中';什么是搜索结果?

Python 如何将正则表达式中的文本分组,而不将其显示在组中';什么是搜索结果?,python,regex,Python,Regex,举例来说,假设我有以下测试字符串和正则表达式: 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

举例来说,假设我有以下测试字符串和正则表达式:

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))?
对破折号进行分组,但我不想在最终的分组结果中看到它们

删除tuple结果的第二个和第四个条目很简单,但是如何编写正则表达式以使它们不包含在第一位呢?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')

您需要的是一个非捕获组。您编写的不是
(…)
,而是
(?:…)
,因此组仍将用于匹配,但不会添加到结果中

有关更多信息,请参阅