簡體   English   中英

從“偽”HTML 中提取文本

[英]Extracting Text from “Pseudo” HTML

我正在嘗試將制造執行系統 (MES) SQL 數據庫中的工作訂單重建為.pdf 表格,以便可以批量打印它們 - 而不是一次打印一個(一次一個是 MES 允許的唯一方式為了)。

當涉及到包含鏈接等的工作說明時,我被卡住了(偽 html ......不知道還能叫什么)。 我對所需數據運行 SQL 查詢並將其放入 Pandas dataframe 中。 以下是 dataframe 中“文本”欄(工作說明)的示例:

 "DWG/TECH DATA: ALL TASK WITHIN THIS WORK ORDER ARE TO BE ACCOMPLISHED IAW: <#Tab><UT=""LinkInvoke(Slide(OBJECT_ID=OBJECTID,@GlyphName=@InlineText,@Classification=General,@RenderDescText=True,'@Desc=| Description: PANEL, |',@Caption=DWG 123456-123,REF_ID=REFID))""><#Tab> MOA DWG: <#Tab><UT=""LinkInvoke(Slide(OBJECT_ID=OBJECT ID,@GlyphName=@InlineText,@Classification=General,@RenderDescText=True,'@Desc=| Description: FACEPLATES |',@Caption=DWG 98765 Plate,REF_ID=REFID))""> <#Tab><UT=""LinkInvoke(Slide(OBJECT_ID=OBJID,@GlyphName=@InlineText,@Classification=General,@RenderDescText=True,'@Desc=| Description: ARTWORK |',@Caption=DWG 9999-8888 ARTWORK,REF_ID=REFID))""><#Tab>"

我試圖返回的數據應該是這樣的:

DWG/技術數據:本工單中的所有任務都將完成 IAW:

DWG 123456-123

恐鳥 DWG:

DWG 98765 板
DWG 9999-8888 藝術品

那里的信息往往會插入很多復制粘貼; 所以發現模式對我的正則表達式技能來說太難了。 本質上,我認為如果“<”和“>”之間的所有內容都被刪除,就會發生這種情況——除非它在“@Caption=”和“,”之間。

我還嘗試使用 beautifulsoup 提取文本,但標題從未出現。

任何建議或幫助將不勝感激。

使用字符串操作(不是正則表達式),可以按照以下方式進行操作:

work = '''DWG/TECH DATA: ALL TASK WITHIN THIS WORK ORDER ARE TO BE ACCOMPLISHED IAW:
<#Tab><UT=""LinkInvoke(Slide(OBJECT_ID=OBJECTID,@GlyphName=@InlineText,@Classification=General,@RenderDescText=True,'@Desc=| Description: PANEL, |',@Caption=DWG 123456-123 ,REF_ID=REFID))""><#Tab>
MOA DWG:
<#Tab><UT=""LinkInvoke(Slide(OBJECT_ID=OBJECT ID,@GlyphName=@InlineText,@Classification=General,@RenderDescText=True,'@Desc=| Description: FACEPLATES |',@Caption=DWG 98765 Plate,REF_ID=REFID))"">
<#Tab><UT=""LinkInvoke(Slide(OBJECT_ID=OBJID,@GlyphName=@InlineText,@Classification=General,@RenderDescText=True,'@Desc=| Description: ARTWORK |',@Caption=DWG 9999-8888 ARTWORK ,REF_ID=REFID))""><#Tab>"
'''

work_dat = work.splitlines()
for line in work_dat:
    line_lst = line.split('|')
    step_1 = [item  if "@Caption=" in item else line_lst for item in line_lst][0]
    step_2 = [item if len(step_1)==1 else step_1[2] for item in step_1]
    if len(step_2)>1:
        print(step_2[1].split('=')[1].split(',')[0].strip())
    else:
        print(step_2[0])

Output:

DWG/TECH DATA: ALL TASK WITHIN THIS WORK ORDER ARE TO BE ACCOMPLISHED IAW:
DWG 123456-123
MOA DWG:
DWG 98765 Plate
DWG 9999-8888 ARTWORK

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM