Python 如何编写一个简单的正则表达式来匹配可选的中间组?
假设我有以下python代码:Python 如何编写一个简单的正则表达式来匹配可选的中间组?,python,regex,Python,Regex,假设我有以下python代码: 重新导入 a='AA_BB_CC' b='AA_CC' 正则表达式=r'(.+)((.+)?)(.+)' groups_a=re.search(regex,a).groups()#('AA_BB',None,None,'CC')) groups_b=re.search(regex,b).groups()#('AA',None,None,'CC')) 我想要一个正则表达式,其中groups\u a=('AA','BB','u','CC')和groups\u b=(
重新导入
a='AA_BB_CC'
b='AA_CC'
正则表达式=r'(.+)((.+)?)(.+)'
groups_a=re.search(regex,a).groups()#('AA_BB',None,None,'CC'))
groups_b=re.search(regex,b).groups()#('AA',None,None,'CC'))
我想要一个正则表达式,其中groups\u a=('AA','BB','u','CC')
和groups\u b=('AA\u BB',None,None,'CC')
。
我当前的正则表达式在
组a
的第一组中捕获'AA\u BB'
。我应该如何更改正则表达式?您可以使用可选的中间部分,并使用[^
来避免跨越边界
^([^_]+)(?:_([^_]+))?_([^_]+)
^
字符串的开头
([^]+)
捕获组1,匹配除之外的任何字符的1+倍
(?:([^]+)?
可以选择匹配。
并在第2组中捕获除以外的任何字符
匹配
([^]+)
捕获组3,匹配除之外的任何字符的1+倍
使用非贪婪量词(+?
)(最后一个除外;或者,如果正则表达式保证占用整行,则可以将其放在^$
中)
使第二组不捕获((?
):
regex=r'(.+?)(?(.+?)(?))(.+)'
我不理解预期的输出。你能解释一下吗?我重新表述了问题。希望问题能清楚一点_??
产生正确的结果?是否也需要捕获
呢?这里的预期输出是什么?您的正则表达式看起来很有趣,我认为它只需要在最后一组中使用贪婪的量词,否则它将不匹配'CC',而只匹配'C'。类似于(.+?)\u(?((.+?)\ u+)(.+)可能?或者添加^
和$
。但需要更正。