我的重新查找使用.group(0)时显示所有内容,但如果使用.group(5),则显示空字符串(python)

2024-10-03 17:18:48 发布

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

我在python中使用这个regex模式:

'("CDS)(complement)?(\()?(join)?([\(]?[<]?[0-9]{0,6}[.]{0,2}[>]?[0-9]{0,6}[,]?[\)]{0,2})*(/locus_tag=)(["])([^"]*)(["])'

要在文件中查找内容,请执行以下操作:

"CDScomplement(join(169314..169361,169451..169552,169635..169690,169833..169937,170056..170125,170277..170518,170640..170841,170968..171090,171191..171263,171387..171508))/locus_tag="MAL1P1.24" 

但有点奇怪,因为当我使用重新查找使用for循环和print(matchobject.group(0)),我可以看到每个matchobject组都完全匹配匹配。但是当我使用print(matchobject.groups())print(matchobject.group(5))时,它返回一个空字符串。发生什么事?你知道吗


Tags: 文件内容fortag模式groupregexgroups
1条回答
网友
1楼 · 发布于 2024-10-03 17:18:48

第5组是后面有*的长组。这并不能捕获组的所有重复(参见earlierquestions以及info here)。将该组用另一组括号括起来,以捕获内部组的所有重复:

>>> rx = re.compile(r'("CDS)(complement)?(\()?(join)?(([\(]?[<]?[0-9]{0,6}[.]{0,2}[>]?[0-9]{0,6}[,]?[\)]{0,2})*)(/locus_tag=)(["])([^"]*)(["])')
>>> [m.groups() for m in rx.finditer(txt)]
[(u'"CDS',
  u'complement',
  u'(',
  u'join',
  u'(169314..169361,169451..169552,169635..169690,169833..169937,170056..170125,170277..170518,170640..170841,170968..171090,171191..171263,171387..171508))',
  u'',
  u'/locus_tag=',
  u'"',
  u'MAL1P1.24',
  u'"')]

相关问题 更多 >