从 "Pseudo" HTML 中提取文本

Extracting Text from "Pseudo" HTML

我正在尝试将制造执行系统 ​​(MES) SQL 数据库中的工单重建为 .pdf 格式,以便它们可以一起打印——而不是一次一个打印(一个时间是 MES 允许的唯一方式。

当涉及到包含链接等的工作说明时,我感到困惑(pseudo-html...不知道还能称呼它什么)。我 运行 SQL 查询所需的数据并将其放入 Pandas 数据框。以下是数据框中“文本”列(工作说明)的示例:

"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>"

我正在尝试 return 的数据应该如下所示:

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

那里的信息往往有很多复制粘贴插入其中;因此,对于我的正则表达式技能来说,寻找模式太难了。从本质上讲,我认为如果删除“<”和“>”之间的所有内容,就会发生这种情况——Except 如果它在“@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])

输出:

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