【问题标题】:Python Regexp for extracting tags and words用于提取标签和单词的 Python 正则表达式
【发布时间】:2016-12-21 21:54:16
【问题描述】:

我有以下字符串:

str1 = "I/TAG1 like/TAG2 red/TAG3 apples/TAG3 ./TAG4"

我在 python 中有两个列表

tokens = []
tags = []

我想要的输出是:

tokens = ['I', 'like', 'red', 'apples', '.']
tags = ['TAG1', 'TAG2', 'TAG3', 'TAG3', 'TAG4']

我正在尝试使用这样的正则表达式:

r"\w*\/"

但这会提取带有斜杠的单词,即 I/。我如何才能获得所需的输出,至少对于令牌(获取 / 之前的所有内容)?

【问题讨论】:

    标签: python regex python-2.7 tokenize


    【解决方案1】:

    你可以使用:

    >>> re.findall(r'([\w.]+)/([\w.]+)', str1)
    
    [('I', 'TAG1'), ('like', 'TAG2'), ('red', 'TAG3'), ('apples', 'TAG3'), ('.', 'TAG4')]
    

    代码:

    >>> tags=[]
    >>> vals=[]
    >>> for m in re.findall(r'([\w.]+)/([\w.]+)', str1):
    ...     tags.append(m[0])
    ...     vals.append(m[1])
    ...
    
    >>> print tags
    ['I', 'like', 'red', 'apples', '.']
    
    >>> print vals
    ['TAG1', 'TAG2', 'TAG3', 'TAG3', 'TAG4']
    

    【讨论】:

    • 最后一个问题,如果我还想提取这样的词,我该怎么办: mt./gal/hr/TAG5, 1/2/TAG5 ? (标签总是在最后一个 / 之后)
    • 好的,使用这个正则表达式然后r'(\S+)/([\w.]+)'而不是r'([\w.]+)/([\w.]+)'
    【解决方案2】:

    您可以通过空格和斜杠组合使用str.split()。然后调用zip() 将输出传送到两个单独的列表中:

    >>> tokens, tags = zip(*[item.split("/") for item in str1.split()])
    >>> tokens
    ('I', 'like', 'red', 'apples', '.')
    >>> tags
    ('TAG1', 'TAG2', 'TAG3', 'TAG3', 'TAG4')
    

    【讨论】:

      猜你喜欢
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 2011-12-31
      相关资源
      最近更新 更多