我在酒店工作。这里是来自我的rapports的原始文件。我需要提取数据以便有类似data['roomNumber']=('paxNumber',isbb,)
以下是仅涉及2个房间,10个和12个房间的示例,因此我需要的数据应为BreakfastData = {'10':['2','BB'],'12':['1','BB']}
1)roomNumber:'以数字开头和结尾'或'以数字开头,严格按照字符串后跟一个或多个空格' 2)paxNumber是'VA'字符串之前的两个数字 3)isbb由'BB'或'HPDJ'事件定义,可以在两个'/'之间找到。但有时格式不好,所以它可以是'/ HPDJ /'或'/ HPDJ /'或'/ HPDJ /'等
10 PxxxxD,David,Mme,T-EXPEDIA TRAVEL先生
08.05.17 12.05.17 TP
SUP DBL / HPDJ / DEBIT CB AGENCE - NR
2 0 VA
NR
12
LxxxxSH,克劳迪亚,杜
08.05.17 19.05.17 TP
1 0 VA
NR BB
SUP SGL / BB / EN ATTENTE DE VIREMENT-EVITER LA 66 -
....等
编辑:最新
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()吗? 在bigining我想分割文件,然后解析它,但我尝试这样的事情,我迷路了。为此我需要一个匹配两种模式的正则表达式。
答案 0 :(得分:1)
在第一种情况下,您要选择两个数字,后面跟着“VA”,您可以这样做
r = re.compile(r"(\d+)\W*(\d+)\W*VA")
在第二种情况下,您可以像这样获得HPDJ或BB
r = re.compile(r"/\s*(HPDJ|BB)\s*/")
这将处理您提到的所有案例>> / HPDJ /'或'/ HPDJ /'或'/ HPDJ /'
答案 1 :(得分:0)
用于获取VA之前的文本的正则表达式如下:
r = re.compile(r"(.*) VA")
然后"数字" (一次是字符串)一旦运行搜索,将存储在搜索匹配对象的第一个group
中。
我不太确定房间号是多少,因为你的描述有点不清楚,所以除非你澄清,否则我无法帮助你。