Ich arbeite im Hotel. hier ist RAW-Datei von Rapporten Hier ein Beispiel, das sich jedoch nur 2 Zimmer ich brauche have.I Daten zu extrahieren, um so etwas wie data['roomNumber']=('paxNumber',isbb,)
Regex extrahieren Daten aus Rohtext
zu haben, die 10 und 12, so dass die Daten i sollte BreakfastData = {'10':['2','BB'],'12':['1','BB']}
1) roomNumber: 'beginnt und endet mit Nummer' oder 'beginnt mit Nummer und strikt einem oder mehreren Leerzeichen gefolgt von' 2) paxNumber sind die zwei Zahlen kurz vor dem 'VA' String
3) isbb wird definiert durch das Vorkommen "BB" oder "HPDJ", das zwischen zwei "/" zu finden ist. Aber manchmal ist das Format nicht gut, so kann es sein, '/ HPDJ /' oder '/ HPDJ /' oder '/ HPDJ /' etc
10 PxxxxD, David, Frau, Herr T- EXPEDIA TRAVEL
08.05.17 12.05.17 TP
SUP DBL/HPDJ/DEBIT CB AGENCE - NR
2 0 VA
NR
LxxxxSH, Claudia, Mrs
08.05.17 19.05.17 TP
1 0 VA
NR BB
SUP SGL/BB/en attente DE VIREMENT- EVITER LA 66 -
.... etc
edit: neueste
import re
data = {}
pax=''
r = re.compile(r"(\d+)\W*(\d+)\W*VA")
r2 = re.compile(r"/\s*(BB|HPDJ)\s*/")
r3 = re.compile(r"\d+\n")
r4 = re.compile(r"\d+\s+\w")
PATH = "/home/ryms/regextest"
with open(PATH, 'rb') as raw:
text=raw.read()
#roomNumber = re.search(r4, text).group()
#roomNumber2 = re.search(r3, text).group()
roomNumber = re.search(r4, text).group().split()[0]
roomNumber2 = re.search(r3, text).group().split()[0]
pax = re.findall(r, text)
adult = pax[0]; enfant = pax[1]
# if enfant is '0':
# pax=adult
# else:
# pax=(str(adult)+'+'+str(enfant))
bb = re.findall(r2, text) #On recherche BB ou HPDJ
data[roomNumber]=pax,bb
print(data)
print(roomNumber)
print(roomNumber2)
Rückkehr
{'10': ([('2', '2'), ('1', '1')], ['HPDJ', 'BB'])}
10
12
[Finished in 0.1s]
Wie kann ich die beiden Zimmernummer in meiner Rückkehr? Ich habe viel Probleme mit dem \ n Problem und lesen(), readline(), readlines(). Was ist der Trick?
Wenn ich alle Rohdaten habe, wie bekomme ich die richtigen BreakfastData {}? Werde ich .zip() benutzen? Bei der Bigining wollte ich die Datei teilen und dann analysieren, aber ich versuche es vielleicht Dinge, ich bin verloren. Und dazu brauche ich eine Regex, die zu beiden Mustern passt.
diese beiden Ausdrücke werden in Ihrem Fall übereinstimmen 1)^\ d + $ #dies wird Match 'Start und endet mit Nummer' 2)^\ d + \ s + \ w + $ # das wird 'Start mit Nummer und streng ein oder mehrere Leerzeichen gefolgt von String' – somil
kann ich einen Regex mit den beiden machen? Ich sehe keine Verwendung von re.findall mit mehreren Mustern? .. Und wie kann ich nur die Zahlen nicht die \ n oder die 'P' bekommen – rasdehya
Stellen Sie nicht diese vielen Fragen in den Kommentaren. Stellen Sie neue Fragen für neue Zweifel und akzeptieren Sie die aktuelle Antwort, wenn sie Ihr Problem löst. – somil