2017-07-01 5 views
0

Ich habe diese Liste mit Teilen der Sprache Tags und ihre Besonderheiten: . Wie Sie sehen können, gibt es keine Leerzeichen zwischen den Zeichen, daher kann es als ein Wort gesehen werden.Teil der 'ein Wort' Zeichenkette entfernen Python

Jetzt brauche ich eine neue Liste mit nur den Teil der Sprache Tags, wie diese ['VNW', 'WW', 'LID']. Ich habe versucht, die Klammern und alles in ihnen mit einer Regex wie diese pattern = re.compile(r'(.*)') zu entfernen.
Ich habe auch versucht, nur die Großbuchstaben übereinstimmen, aber ich kann es nicht richtig machen. Vorschläge?

Antwort

3

Regulärer Ausdruck ist für diesen Fall nicht erforderlich. Aufteilen durch (; dann hol dir nur den ersten Teil.

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

Short-Lösung str.find() Funktion:

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 Inhalt:

['VNW', 'WW', 'LID'] 
1

Einige der möglichen Lösungen sind:

Entfernen Brackets Schleife

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 

Mit 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   

Ausgang: [ 'VNW', 'WW', ' LID ']

0

Zum Beispiel:

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