2017-07-01 52 views
0

我有這個帶有詞性標記及其細節的列表:['VNW(pers,pron,nomin,red,2v,ev)', 'WW(pv,tgw,met-t)', 'LID(bep,stan,rest)']。正如你所看到的,角色之間沒有空格,所以它可以被看作是一個單詞。刪除'one word'字符串的一部分Python

現在我需要一個只包含詞性標記的新列表,如['VNW', 'WW', 'LID']。 我試着用這樣的正則表達式去掉括號和其中的所有內容,如pattern = re.compile(r'(.*)')
我也試圖匹配只有大寫字母,但我不能正確。建議?

回答

3

這種情況下不需要正則表達式。拆分(;那麼只能得到第一部分。

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

短溶液使用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'] 
1

一些可能的解決方案是:

使用循環

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 

卸下支架使用正則表達式

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

0

例如:

In [102]: s=['VNW(pers,pron,nomin,red,2v,ev)', 'WW(pv,tgw,met-t)', 'LID(bep,stan,rest)'] 
In [103]: [x.split('(', 1)[0] for x in s] 
Out[103]: ['VNW', 'WW', 'LID']