2017-05-10 17 views
0

私はホテルで働いています。ここで私はここでdata['roomNumber']=('paxNumber',isbb,)正規表現は生テキストからデータを抽出します

のようなものを持っているために、データを抽出する必要がhave.I rapportsからのRAWファイルには、懸念のみ2部屋は、10と12ので、私は必要なデータがあるべきというサンプルがされているBreakfastData = {'10':['2','BB'],'12':['1','BB']}

1)roomNumber: '数字で始まり数字で始まり、数字で始まり、文字列で1つ以上のスペースが続く' 2)paxNumberは 'VA'文字列の直前の2つの数字です
3)isbbは2つの '/'の間にある 'BB'または 'HPDJ'オカレンスそれは '/ HPDJ /' または '/ HPDJ /' または '/ HPDJ /' など

10 PxxxxD、デビッド、マダム、氏T- EXPEDIA TRAVEL

ことができるので、しかし、時にはフォーマットは良くありません

08.05.17 12.05.17 TP

SUP DBL/HPDJ /デビットCB AGENCE - NR

2 0 VA

NR

LxxxxSH、クラウディア、ミセス

08.05.17 19.05.17 TP

1 0 VA

NR BB

SUP SGL/BB/EN ATTENTE DE VIREMENT- EVITER LA 66 -

....など

編集:私は私の見返りに2 roomNumberを取得できますか最新

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) 

リターン

{'10': ([('2', '2'), ('1', '1')], ['HPDJ', 'BB'])} 
10 
12 
[Finished in 0.1s] 

? 私は\ n問題とread()、readline()、readlines()の問題をたくさん持っています。

生データをすべて取得する場合、適切なBreakfastData {}をどのように取得しますか? .zip()を使用しますか? 私はファイルを分割して解析することを望んでいましたが、私はそうするかもしれませんが、私は迷ってしまいます。そして、私は両方のパターンに一致する正規表現が必要です。

答えて

1

あなたはあなたがこの

r = re.compile(r"/\s*(HPDJ|BB)\s*/") 

ようHPDJやBBを得ることができる第2のケースで、この

r = re.compile(r"(\d+)\W*(\d+)\W*VA") 

のように行うことができます「VA」が続いている2つの数値を選択します>>/HPDJ/'または'/HPDJ/'または'/HPDJ/'

+0

この2つの式はあなたのケースで一致します 1)^ \ d + $#これは数字の始まりと厳密に1つ以上の空白が文字列で続きます ' – somil

+0

2つの正規表現を1つにすることはできますか?私は複数のパターンとre.findallの使用を参照してください? ..そして、私は\ nか 'P'でない数字だけを得ることができます – rasdehya

+0

コメントでこれらの多くの質問をしないでください。新たな疑問に対して新しい質問をし、あなたの問題を解決するなら現在の答えを受け入れます。 – somil

0

次のようにVAである前にテキストを取得する正規表現式:

r = re.compile(r"(.*) VA") 

そして(文字列になる)「番号」が検索マッチオブジェクトの最初groupに格納されます、一度検索を実行すると

あなたの説明が少し不明なので、私は部屋の番号が何であるかはよく分かりません。あなたが明確にしない限り、私はそれを助けることはできません。最初のケースでは

関連する問題