Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何编写一个简单的正则表达式来匹配可选的中间组?_Python_Regex - Fatal编程技术网

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=(

假设我有以下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=('AA\u BB',None,None,'CC')

我当前的正则表达式在
组a
的第一组中捕获
'AA\u BB'
。我应该如何更改正则表达式?

您可以使用可选的中间部分,并使用
[^
来避免跨越
边界

^([^_]+)(?:_([^_]+))?_([^_]+)
  • ^
    字符串的开头
  • ([^]+)
    捕获组1,匹配除
    之外的任何字符的1+倍
  • (?:([^]+)?
    可以选择匹配
    并在第2组中捕获除
    以外的任何字符
  • 匹配
  • ([^]+)
    捕获组3,匹配除
    之外的任何字符的1+倍

  • 使用非贪婪量词(
    +?
    )(最后一个除外;或者,如果正则表达式保证占用整行,则可以将其放在
    ^$
    中)
  • 使第二组不捕获(
    (?
    ):
  • regex=r'(.+?)(?(.+?)(?))(.+)'


    我不理解预期的输出。你能解释一下吗?我重新表述了问题。希望问题能清楚一点_??
    产生正确的结果?是否也需要捕获
    呢?这里的预期输出是什么?您的正则表达式看起来很有趣,我认为它只需要在最后一组中使用贪婪的量词,否则它将不匹配'CC',而只匹配'C'。类似于
    (.+?)\u(?((.+?)\ u+)(.+)可能?或者添加
    ^
    $
    。但需要更正。