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

用于提取标记和单词的Python Regexp,python,regex,python-2.7,tokenize,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'] 我正在尝试使用这样的regexp: r"\w*\/" 但是它用斜杠提取单词,即i/。如何获得

我有以下字符串:

str1 = "I/TAG1 like/TAG2 red/TAG3 apples/TAG3 ./TAG4"
我有两个python列表

tokens = []
tags = []
我期望的结果是:

tokens = ['I', 'like', 'red', 'apples', '.']
tags = ['TAG1', 'TAG2', 'TAG3', 'TAG3', 'TAG4']
我正在尝试使用这样的regexp:

r"\w*\/"
但是它用斜杠提取单词,即i/。如何获得所需的输出,至少对于令牌(在/)之前获取所有内容?

您可以使用:

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

您可以按空格和斜杠组合使用
str.split()
。然后调用
zip()

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

最后一个问题,如果我还想提取这样的单词,我必须做什么:mt./gal/hr/TAG5,1/2/TAG5?(标记始终位于最后一个/)确定使用此正则表达式,然后使用
r'(\S+)/([\w.]+)
而不是
r'([\w.]+)/([\w.]+)