解读一段正则表达式的代码内容
input:为html源码片段,其中有以下内容:
<PARAM name=FileInfos value="<!1!>8BDE3F3E6575393C4825852900265C9D<file_action>newonefile</file_action><file_unid>132284704358814000NQ</file_unid><UpdateInfo>张三于2020-03-12 15:01:57创建.;李四于2020-03-12 15:31:58重命名.;张三于2020-03-12 15:32:23重命名.</UpdateInfo><file_name>3-附件3:评价参考要素.xlsx</file_name><file_size>34225</file_size><file_create>2020-03-12 15:01:57</file_create><file_update>2020-03-12 15:07:15</file_update><file_editmodel>0</file_editmodel><file_lockuser>0</file_lockuser><CreateInfo>唐森 2020-03-12 15:07:15</CreateInfo><CusAttributes></CusAttributes><filetype>default</filetype><user_name>唐森</user_name><localfile_create>2020-3-03 10:24:46</localfile_create><localfile_update>2020-3-04 10:35:53</localfile_update><CatNum>0</CatNum><Ext></Ext><IsGaizhang>False</IsGaizhang><TaodaInfo></TaodaInfo><doc_unid>4825795A000CAA90482585290034FB41</doc_unid></!1!><!2!>8BDE3F3E6575393C4825852900265C9D<file_action>newonefile</file_action><file_unid>132284704357804000N5</file_unid><UpdateInfo>唐森于2020-03-12 15:01:57创建.;战三于2020-03-12 15:31:48重命名.;白于2020-03-12 15:32:17重命名.</UpdateInfo><file_name>2-附件1、2:画像评价情况.xlsx</file_name><file_size>22007</file_size><file_create>2020-03-12 15:01:57</file_create><file_update>2020-03-12 15:07:15</file_update><file_editmodel>0</file_editmodel><file_lockuser>0</file_lockuser><CreateInfo>唐森 2020-03-12 15:07:15</CreateInfo><CusAttributes></CusAttributes><filetype>default</filetype><user_name>唐森</user_name><localfile_create>2020-3-03 10:24:46</localfile_create><localfile_update>2020-3-04 12:10:19</localfile_update><CatNum>0</CatNum><Ext></Ext><IsGaizhang>False</IsGaizhang><TaodaInfo></TaodaInfo><doc_unid>4825795A000CAA90482585290034FB44</doc_unid></!2!><!3!>8BDE3F3E6575393C4825852900265C9D<file_action>newonefile</file_action><file_unid>132284791227031961NG</file_unid><UpdateInfo>白于2020-03-12 17:27:19创建.</UpdateInfo><file_name>1-工单〔2020〕4号.gw</file_name><file_size>27775</file_size><file_create>2020-03-12 17:27:19</file_create><file_update>2020-03-12 17:32:02</file_update><file_editmodel>0</file_editmodel><file_lockuser>0</file_lockuser><CreateInfo>白云 2020-03-12 17:32:02</CreateInfo><CusAttributes></CusAttributes><filetype>default</filetype><user_name>白云</user_name><localfile_create>2020-3-12 17:32:02</localfile_create><localfile_update>2020-3-12 17:32:02</localfile_update><CatNum>0</CatNum><Ext></Ext><IsGaizhang>False</IsGaizhang><TaodaInfo></TaodaInfo><doc_unid>4825795A000CAA90482585290034FB4A</doc_unid></!3!><!4!>2CEB197C9E8F0CB24825852900362984<file_unid>132284790629461079N8</file_unid><file_name>1-工单发〔2020〕4号.sep</file_name><file_size>20035</file_size><file_create>2020-3-12 17:26:19</file_create><file_update>2020-3-12 17:31:2</file_update><file_editmodel>0</file_editmodel><doc_unid>4825795A000CAA904825852A0033CF6A</doc_unid></!4!><!5!>2CD89E0B21B58D224825852D000A1289<file_unid>132284790391160818N6</file_unid><file_name>1-工监发〔2020〕4号.docx</file_name><file_size>39753</file_size><file_create>2020-3-12 17:30:39</file_create><file_update>2020-3-12 17:30:39</file_update><file_editmodel>0</file_editmodel><doc_unid>FDC0E608B54C8F024825852D000F35E3</doc_unid></!5!>">
的片段,以下代码可以把他变成
[{},{},{},{},{}]的形式,
def funtion(html):
regex = r"<(!\d+!)>([\s\S]*?)</\1>"
regex2 = r"<(\w+)>([\s\S]*?)</\1>"
file_list = re.finditer(regex, html)
result = []
for m in file_list:
content = m.group(2)
if content is not None:
items = re.finditer(regex2, content)
line = {}
for item in items:
if item is not None:
line[item.group(1)] = item.group(2)
result.append(line)
return result
但我并不是很清楚这代码是怎么运行的,我现在需要的是一个数组
[{‘file_name’:file_name,’file_url’:url},{},{}]字典里
url的模版是这样的:
http://server.com/<doc_unid>/$file/<file_unid><file_name>(扩展名部分)
也就是需要、、这三个value,请问该如何修改此方法,或者有更简单易懂的方法?
中需要得到每个元素的
又搞复杂了,用bs4
soup = BeautifulSoup(html, 'lxml',exclude_encodings='utf-8')
data = soup.find('param', attrs={'name': 'FileInfos'})['value']
soup_data = BeautifulSoup(data, 'lxml', exclude_encodings='utf-8')
for n in soup_data.children:
print(n.doc_unid.string)
可为什么返回第一个数据
项目具体的场景是取来一个片段
具体标签结构为
而需求就是把这个FileInfos中的value取出来然后结构化,最后我还是利用了bs4来操作。
可能有些复杂,希望大家可交流简便的方法