用于提取标签和单词的Python Regexp

时间:2016-08-15 16:51:17

标签: python regex python-2.7 tokenize

我有以下字符串:

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 /。如何获得所需的输出,至少对于令牌(在/之前得到所有内容?)

2 个答案:

答案 0 :(得分:4)

您可以使用:

>>> 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']

答案 1 :(得分: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')