我有一个包含各种数据的html格式文件,我需要从中提取某些对(id,title)。为此,我编写了一个在regEx online tester中运行良好的regEx。
我需要从中提取数据的文件:
<g id="node841" class="cond_node"><title>SR_AUD_Nbest_List_PlaylistPlayPlaylist_cond</title>
<g id="node842" class="prompt_node"><title>SR_AUD_Nbest_List_PlaylistPlayPlaylist_prompt</title>
<g id="edge841" class="edge"><title>SR_AUD_Nbest_List_PlaylistPlayPlaylist_cond->SR_AUD_Nbest_List_PlaylistPlayPlaylist_prompt</title>
<g id="node848" class="node"><title>SR_AUD_Main_link_51</title>
<g id="node841" class="prompt_node"><title>SR_AUD_Nbest_List_PlaylistPlayPlaylist_prompt</title>
<g id="node841" class="cmd_node"><title>SR_AUD_Nbest_List_PlaylistPlayPlaylist_cmd</title>
<g id="node856" class="exit_node"><title>EXIT_63</title>
<g id="node860" class="node"><title>SR_AUD_ConfirmNAPlayPlaylistName_NotAvailable_3</title>
<g id="node860" class="node"><title>SR_AUD_ConfirmNAPlayPlaylistName_NotAvailable_4</title><title>SR_AUD_ConfirmNAPlayPlaylistName_NotAvailable_3</title>
使用此正则表达式:
^{pr2}$我正在提取符合上述条件的整条直线。
使用该文件和正则表达式提取这些特定行的python脚本:
result = re.search(r'(id="\w+"\s+class="node">+.{1,})(?!.+(_cmd|_cond|_prompt|EXIT))', svg)
但问题是,结果只包含1对数据(仅用于节点id 848),用“space char”分隔,而不是用正则表达式提取的整个行列表。在
您知道如何从整个文件中提取与该正则表达式匹配的所有数据,而不仅仅是一行吗?在这种特殊情况下,提取的数据应该是,正如在线regex测试人员所说:
<g id="node848" class="node"><title>SR_AUD_Main_link_51</title>
<g id="node860" class="node"><title>SR_AUD_ConfirmNAPlayPlaylistName_NotAvailable_3</title>
<g id="node860" class="node"><title>SR_AUD_ConfirmNAPlayPlaylistName_NotAvailable_4</title>
正如注释中提到的,正则表达式可能不是解析XML的最佳工具。在
尽管如此,您的方法的唯一问题似乎是使用^{} 而不是^{} 或{a3},因此只返回第一个匹配项,而不是全部。在
但是,请注意,在最后一个例子中,它将捕获整个行,而不仅仅是第一个
<title>
。在输出:
^{pr2}$1.找到所有标签
2.您可以通过将标记视为字典来访问标记的属性。在
^{4}$给您所需的id,
title.text
给您文本。在相关问题 更多 >
编程相关推荐