Python 用于提取标签和单词的正则表达式
Python Regexp for extracting tags and words
我有以下字符串:
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/。我怎样才能获得所需的输出,至少对于令牌(获取 / 之前的所有内容)?
您可以使用:
>>> 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()
和 space 以及斜杠。然后调用 zip()
将输出通过管道传输到两个单独的列表中:
>>> tokens, tags = zip(*[item.split("/") for item in str1.split()])
>>> tokens
('I', 'like', 'red', 'apples', '.')
>>> tags
('TAG1', 'TAG2', 'TAG3', 'TAG3', 'TAG4')
我有以下字符串:
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/。我怎样才能获得所需的输出,至少对于令牌(获取 / 之前的所有内容)?
您可以使用:
>>> 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()
和 space 以及斜杠。然后调用 zip()
将输出通过管道传输到两个单独的列表中:
>>> tokens, tags = zip(*[item.split("/") for item in str1.split()])
>>> tokens
('I', 'like', 'red', 'apples', '.')
>>> tags
('TAG1', 'TAG2', 'TAG3', 'TAG3', 'TAG4')