如何在python中解析混乱的字符串列表



我正试图从xml文件中提取一些ID及其状态,我已经到了一个包含这些信息的字符串列表的地步,我只需要提取代码和状态(通过或失败(。问题是,字符串非常混乱,我是python的新手,所以我不知道如何做到这一点。需要查看的代码段:

l = len(res_smaller)
print(res_smaller)
for field in range(1, l, 2):
aux = res_smaller[field]
print(aux)

输出:

<big class="Heading3">1.2 <a name="i__786909744_34">Test Case CODE_2096: RANDOMTEXT</a>: Failed</big>
<big class="Heading3">1.3 <a name="i__786909744_1424">Test Case CODE_2101: RANDOMTEXT</a>: Failed</big>
<big class="Heading3">1.4 <a name="i__786909744_2814">Test Case CODE_2111: RANDOMTEXT</a>: Failed</big>   
<big class="Heading3">1.5 <a name="i__786909744_2850">Test Case CODE_2098: RANDOMTEXT</a>: Failed</big>

我将BeautifulSoup库用于find_allHeading3类,进行了更多解析,现在我有了一个列表,a从中打印出我感兴趣的行(这就是为什么我使用从1递增2的原因(。我的想法是创建一个形式为CODE_NUMBER: STATUS的字典,但我不知道如何从每个字段中提取这些内容。我的想法是使用aux.split(" ")通过空白分隔符来分割它们,并从每个字段中提取第5个和第7个元素,但这给了我一个错误,所以我不确定这在python中是否可行。有什么想法吗?

编辑:这是aux.split的代码,我还添加了作为一个整体打印的列表:

l = len(res_smaller)
print(res_smaller)
for field in range(1, l, 2):
aux = res_smaller[field]
print(aux.split(" "))  

输出:

[<big class="Heading3">1.1 <a name="i__786909744_13">RANDOMTEXT</a>: Passed</big>, <big class="Heading3">1.2 <a name="i__786909744_34">Test Case CODE_2096: RANDOMTEXT</a>: Failed</big>, <big class="Heading3">Main Part of Test Case</big>, <big class="Heading3">1.3 <a name="i__786909744_1424">Test Case CODE_2101: RANDOMTEXT</a>: Failed</big>, <big class="Heading3">Main Part of Test Case</big>, <big class="Heading3">1.4 <a name="i__786909744_2814">Test Case CODE_2111: RANDOMTEXT</a>: Failed</big>, 
<big class="Heading3">Main Part of Test Case</big>, <big class="Heading3">1.5 <a name="i__786909744_2850">Test Case CODE_2098: RANDOMTEXT</a>: Failed</big>, <big class="Heading3">Main Part of Test Case</big>]
Traceback (most recent call last):
File "D:CodePythonProjectsHTML_parser.py", line 43, in <module>
print(aux.split(" "))
TypeError: 'NoneType' object is not callable

强烈建议在re模块中使用findall。由于输入不包括在内,我正在使用我所拥有的:

import re
l = len(res_smaller)
print(res_smaller)
my_dict = {}
for field in range(1, l, 2):
aux = res_smaller[field]
status = re.findall('</a>: (.*?)</big>', aux, re.DOTALL)
code = re.findall('Case (.*?):', aux, re.DOTALL)
my_dict[code[0]] = status[0]
print(my_dict)

输出:

{'CODE_2096': 'Failed', 'CODE_2101': 'Failed', 'CODE_2111': 'Failed', 'CODE_2098': 'Failed'}

最新更新