Code: Alles auswählen
class Mission
{
[...]
addOns[]=
{
"lsr_rang",
[...]
"ofpec_blood"
};
[...]
addOnsAuto[]=
{
"lsr_rang",
[...]
"BMP2"
};
[...]
};
Code: Alles auswählen
class Mission
{
[...]
addOns[]=
{
"lsr_rang",
[...]
"ofpec_blood"
};
[...]
addOnsAuto[]=
{
"lsr_rang",
[...]
"BMP2"
};
[...]
};
Code: Alles auswählen
addOns = [ "lsr_rang", ... , "ofpec_blood" ]
addOnsAuto = [ "lsr_rang", ... , "BMP2" ]
Fertig!jens hat geschrieben:OK, danke... Ich denke ich werde dann doch mit RE experimentieren....
Code: Alles auswählen
import re
data = """class Mission
{
[...]
addOns[]=
{
"lsr_rang",
"ofpec_blood"
};
[...]
addOnsAuto[]=
{
"lsr_rang",
"BMP2"
};
[...]
};"""
gefunden = re.findall(
"addOns[].*?{(.*?)}|addOnsAuto[].*?{(.*?)}",
data.replace("\n", ""),
re.I | re.M
)
addOns = []
for item in gefunden[0].split(","):
addOns.append(item.replace('"', '').strip())
addOnsAuto = []
for item in gefunden[1].split(","):
addOnsAuto.append(item.replace('"', '').strip())
print addOns
print addOnsAuto
Code: Alles auswählen
f = file("text.txt","r")
dic = {}
ads = []
for line in f:
if '{' in line: continue
elif '};' in line:
if chunk:
dic[chunk] = ads
chunk = ""
ads = []
elif '[]=' in line:
chunk = line.strip().strip('[]=')
ads = []
else:
ad = line.strip().strip('".').strip('[]')
ads.append(ad)
print dic
Ne, danke... Ich hab mir das die hälte angeschaut, aber nix wirklich verstanden Ich denke RE ist in diesem Fall die einfachste Variante...CM hat geschrieben:Schau doch mal hier: http://www.python.org/moin/LanguageParsing
Hi mawe!mawe hat geschrieben: Eine Version ohne Regex. So kompliziert wie nur möglich, scheint aber zu funktionieren
Wow, ich hab noch garnicht angefangen...gerold hat geschrieben:Fertig!
Meine Variante geht in zwei Schritten vor:['lsr_rang', 'ofpec_blood']
['lsr_rang', 'ofpec_blood']
Code: Alles auswählen
import re
data = """class Mission
{
[...]
addOns[]=
{
"lsr_rang",
"ofpec_blood"
};
[...]
addOnsAuto[]=
{
"lsr_rang",
"BMP2"
};
[...]
};"""
def get( typ, data ):
# Erst alles in den {}-Klammern rausfischen
result = re.findall(
typ+'\[\]=.*?{(.*?)}',
data,
re.S
)
# Alle Werte in "" zurück geben
return re.findall( r'"(.*?)"', result[0] )
print get( "addOns", data )
print get( "addOnsAuto", data )
['lsr_rang', 'ofpec_blood']
['lsr_rang', 'BMP2']
Sorry, ist jetzt ausgebessert. Das war mal wieder so ein Copy&Paste-Fehler.jens hat geschrieben: In deiner Variante ist allerdings auch ein fehler
Sie spuckt nämlich zweimal das selbe raus:['lsr_rang', 'ofpec_blood']
['lsr_rang', 'ofpec_blood']
Die letzte Zeile tut nicht das was sie soll:gerold hat geschrieben:Code: Alles auswählen
gefunden = re.findall( "addOns[].*?{(.*?)}|addOnsAuto[].*?{(.*?)}", data.replace("\n", ""), re.I or re.M )
Code: Alles auswählen
In [8]: re.I or re.M
Out[8]: 2
In [9]: re.I | re.M
Out[9]: 10
Hi BlackJack!BlackJack hat geschrieben: Die letzte Zeile tut nicht das was sie soll:Der ``or``-Operator gibt eines der beiden Objekte zurück (im vorliegenden Fall das `re.I`), während ``|`` eine Oder-Verknüpfung der Bits von zwei Zahlen ist.Code: Alles auswählen
In [8]: re.I or re.M Out[8]: 2 In [9]: re.I | re.M Out[9]: 10