使用Python正则表达式从组织模式行提取标记

2024-04-23 17:35:18 发布

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

我想使用Python正则表达式从以下组织模式行中提取三个尾随标记:

  • TODO[#A]做一些重要的事情:Tag1:Tag2:Tag3:

下面的代码只识别最后一个标记,但将其他两个标记放入第一个组

import re

m = re.search('(.*)\s*:(.*):$','* TODO [#A] Do something important             :Tag1:Tag2:Tag3:')
print(m.group(1))
print(m.group(2))

结果:

  • 第一组:*TODO[#A]做一些重要的事情:Tag1:Tag2
  • 第二组:Tag3

我需要更改什么才能使Tags1和Tag2也属于第二组?你知道吗


Tags: 代码标记importresearch模式group事情
2条回答

如果行的主体中没有冒号,可以使用split(':'),如下所示:

>>> s = 'TODO [#A] Do something important :Tag1:Tag2:Tag3:'
>>> s.split(':')
['TODO [#A] Do something important ', 'Tag1', 'Tag2', 'Tag3', '']
>>> s.split(':')[1:-1] # get just the tags
['Tag1', 'Tag2', 'Tag3']

*是贪婪的。因此,.*将尽可能多地匹配,并且仍然允许正则表达式的其余部分匹配。要使量词非贪婪您需要在第一个捕获组中添加?。你知道吗

import re

s = '* TODO [#A] Do something important :Tag1:Tag2:Tag3:'
m = re.search(r'(.*?)\s*:(.*):$', s)

print "\n".join(m.groups())

你也可以在这里分开。你知道吗

import re

s = '* TODO [#A] Do something important :Tag1:Tag2:Tag3:'
m = re.split('\s+:|:$', s)

print "\n".join([m[0], m[1]])

输出

* TODO [#A] Do something important
Tag1:Tag2:Tag3

相关问题 更多 >