【问题标题】:Extracting the tags from an org mode line using Python regex使用 Python 正则表达式从组织模式行中提取标签
【发布时间】:2014-05-18 19:34:16
【问题描述】:

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

  • 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 也属于第二组?

【问题讨论】:

    标签: python regex emacs org-mode


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案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']
      

      【讨论】:

        猜你喜欢
        • 2018-07-29
        • 2021-06-27
        • 2012-10-27
        • 2018-05-08
        • 1970-01-01
        • 2015-11-21
        • 2013-06-12
        相关资源
        最近更新 更多