gpt4 book ai didi

python - 使用 RegEx 从伪标签之间提取数据(不能使用 BeautifulSoup)

转载 作者:太空宇宙 更新时间:2023-11-03 19:03:28 25 4
gpt4 key购买 nike

我一直在尝试各种方法,但无论我做什么,我都会得到空白输出。这是我尝试导入和解析的文件中内容的简短版本:

<PRESOL>
<DATE>0310
<AGENCY>Defense Logistics Agency
<DESC>*(this is full of HTML tags and the such)*
<URL>https://www.fbo.gov/spg/DLA/J3/DSCR-BSM/SPE4A713R0575/listing.html
<SETASIDE>N/A
</PRESOL>

我想创建一个表,其中每个日期、机构、描述、URL 和 SETASIDE 有一列,因为“PRESOL”标签之间有数百个这样的条目。每个标签数据后面还有回车,当我将其拉入 python 时,它会显示为“\n”。这是我到目前为止尝试过的正则表达式(s 是我读入文件并 re 已导入的变量):

testall = re.findall(r'<PRESOL>\n<DATE>(.*?)\n<AGENCY>(.*?)\n<DESC>(.*?)\n<URL>(.*?)\n<SETASIDE>(.*?)\n</PRESOL>', s)

我尝试了不使用“\n”以及使用 (.+?) 而不是 (.*?) 的操作。

如果您需要更多信息来帮助我,请告诉我,我们将不胜感激。我的最终目标是能够轻松地从 ftp://ftp.fbo.gov/FBOFeed20130311 导入数据(似乎有多种表类型,但我目前专注于 PRESOL,只是为了让这个概念证明落地。

最佳答案

花了一些时间,为 FBO 数据构建了一个解析器函数。怀疑您是否仍然需要它,但这也许会对其他人有所帮助。

def fbo_parser(fbo):
split_fbo = fbo.split('<PRESOL>')
n_ops = len(split_fbo)
all_ops_dict = {}
for i in range(1, n_ops):
strings = fbo.split('<PRESOL>')[i].replace('</PRESOL>', '')
strings = strings.split('<')
lists = [x.split('>') for x in strings]
opp_dict = {}
desc_count = 0
desc = ['OpDesc', 'URL_Desc', 'EMAIL_Desc']
for ii in lists:
if len(ii) == 2:
if ii[0] == 'DESC':
#TODO: Figure out a better name for the duplicate DESC
ii[0] = ii[0] + str(desc_count)
desc_count += 1

opp_dict[ii[0]] = ''.join([x for x in filter(None, ii[1].split('\\n'))])
all_ops_dict[i] = opp_dict
return all_ops_dict

f = open('FBOFeed19991231', 'rb')
fbo = str(f.read())
fbop = fbo_parser(fbo)

fbop[68]
RETURNS:>>
{'ADDRESS': 'Christel.Wittmer@ramstein.af.mil',
'AGENCY': 'Department of the Air Force',
'CLASSCOD': '32',
'CONTACT': 'Christel Wittmer, Ms., Phone (49) 631 3539 174, Fax (49) 631 3539 158, Email Christel.Wittmer@ramstein.af.mil - Ursula Nabinger, Ms., Phone (49) 631 3539 178, Fax (49) 631 3539 158, Email Ursula.Nabinger@ramstein.af.mil',
'DATE': '0720',
'DESC0': 'WORKBENCH FOR VEHICLE MAINTENANCE,2 METER LONG, TOP IS METAL COVERWERKBANK, 2 METER LANG, SCHICHSTOFF OEL AND FEUCHTIGKEITSBESTAENDIG (22EA/STCK)WORKBENCH FOR VEHICLE MAINTENANCE, 2 METER LONG TOP CONSISTS 40 MM TICK WOODWERKBANK, 2 METER LANG ARBEITSPLATTE HOLZ MEHRSCHICHTVERLEIMTESBUECHENHOLZ (22EA/STCK)FOR MORE INFO CALL MRS WITTMER 0631-3539-174!',
'DESC1': 'Link to FedBizOpps document.',
'DESC2': 'Christel Wittmer',
'EMAIL': '',
'LINK': '',
'LOCATION': '700 CONS',
'OFFADD': 'United States Air Force, United States Air Force Europe, Rhine Ordnance Barracks, USAFE CONS, UNIT 3115, Germany, . 09094-3115',
'OFFICE': 'United States Air Force Europe',
'RESPDATE': '073099',
'SOLNBR': 'F61521-99T0607',
'SUBJECT': 'WORKBENCH FOR VEHICLE MAINTENANCE',
'URL': 'http://www.fbo.gov/spg/USAF/USAFE/ROB/F61521-99T0607/listing.html',
'YEAR': '99',
'ZIP': '09021'}

关于python - 使用 RegEx 从伪标签之间提取数据(不能使用 BeautifulSoup),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15423142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com