我有一个包含部分语音标记及其细节的列表:['VNW(pers,pron,nomin,red,2v,ev)', 'WW(pv,tgw,met-t)', 'LID(bep,stan,rest)']。正如你所看到的,字符之间没有空格,所以它可以被看作是一个单词。
现在我需要一个只有部分语音标签的新列表,比如这个['VNW', 'WW', 'LID']。我试着用像这个pattern = re.compile(r'(.*)')这样的正则表达式删除括号和它们中的所有东西。
我也试着只匹配大写字母,但我做错了。有什么建议吗?
发布于 2017-07-01 10:16:50
这种情况不需要正则表达式。由(拆分;然后只获得第一部分。
>>> 'VNW(pers,pron,nomin,red,2v,ev)'.split('(')
['VNW', 'pers,pron,nomin,red,2v,ev)']
>>> 'VNW(pers,pron,nomin,red,2v,ev)'.split('(')[0]
'VNW'>>> xs = ['VNW(pers,pron,nomin,red,2v,ev)', 'WW(pv,tgw,met-t)',
'LID(bep,stan,rest)']
>>> [x.split('(')[0] for x in xs]
['VNW', 'WW', 'LID']发布于 2017-07-01 11:06:58
一些可能的解决办法是:
使用循环消除括号
l = ['VNW(pers,pron,nomin,red,2v,ev)', 'WW(pv,tgw,met-t)', 'LID(bep,stan,rest)']
for i in range(len(l)):
i1,i2=l[i].find('('),l[i].find(')')
l[i]=l[i][:i1]+l[i][i2+1:]
print l使用Regex
import re
pattern = r'\([^)]*\)'
l = ['VNW(pers,pron,nomin,red,2v,ev)', 'WW(pv,tgw,met-t)', 'LID(bep,stan,rest)']
for i in range(len(l)):
l[i] = re.sub(pattern, '', l[i])
print l 输出: 'VNW','WW','LID‘
发布于 2017-07-01 10:31:26
使用str.find()函数的简短解决方案:
l = ['VNW(pers,pron,nomin,red,2v,ev)', 'WW(pv,tgw,met-t)', 'LID(bep,stan,rest)']
result = [i[:i.find('(')] for i in l]result内容:
['VNW', 'WW', 'LID']https://stackoverflow.com/questions/44859761
复制相似问题