正则表达式从原始文本中提取数据

regex extract data from raw text

我在酒店工作。这是来自 rapports 的原始文件,我 have.I 需要提取数据才能得到类似 data['roomNumber']=('paxNumber',isbb,)

的内容

这是一个只涉及 2 个房间的示例,即 10 号和 12 号,所以我需要的数据应该是 BreakfastData = {'10':['2','BB'],'12':['1','BB']}

1)房间号:'start and ends with number' 或 'start with number and strictly one or more space followd by string' 2)paxNumber 是 'VA' 字符串
之前的两个数字 3)isbb 由 'BB' 或 'HPDJ' 定义,可以在两个 '/' 之间找到。但有时格式不好所以可以是'/HPDJ/'或'/HPDJ/'或'/HPDJ/'等

10 PxxxxD,David,Mme, Mr T- EXPEDIA TRAVEL

08.05.17 12.05.17 TP

SUP DBL / HPDJ / DEBIT CB AGENCE - NR

2 0 VA

NR

12

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

编辑:最新

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)

return

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

如何在我的 return 中获取两个房间号? 我在 \n 问题和 read()、readline()、readlines() 方面遇到了很多麻烦。有什么诀窍?

当我拥有所有原始数据时,我将如何获得正确的 BreakfastData{}?我会使用 .zip() 吗? 在 bigining 时,我想拆分文件然后解析它,但我尝试了一些事情,我迷路了。为此,我需要一个匹配两种模式的正则表达式。

获取VA前文本的正则表达式如下:

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

然后 "number"(将是一个字符串)将存储在搜索匹配对象的第一个 group 中,一旦您 运行 搜索。

我也不太清楚房间号是多少,因为你的描述有点不清楚,除非你说清楚,否则我帮不了你。

在第一种情况下,你想 select 两个数字后面跟着 'VA' 你可以这样做

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

第二种情况你可以像这样得到HPDJ或BB

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

这将处理您提到的所有情况 >> /HPDJ/' 或 '/HPDJ/' 或 '/HPDJ/'