我正在尝试使用正则表达式来解析XML文件(在我看来,这似乎是正确的方法)。
我的XML看起来像这样:
Symbol("TerminalWidgetOptions");
要访问该文本,我正在使用: attr = re.search('[@ id =(CALLERID | GR_BUS | label)]',line)
我想得到格式化解析xml的结果:
line='<form id="main">\n<input {disable} style="display:none" id="CALLERID"
value="58713780">\n<input {disable} style="display:none" id="GR_BUS"
value="VGH1"\n<td><input id="label" {disable} style="font-
size:9px;width:100%;margin:0;padding:1;" type=text></td>\n</form>>'
但没有回复。
有人可以指出我做错了什么吗? 感谢
答案 0 :(得分:0)
这是输出:
line = '''<form id="main">\n
<input {disable} style="display:none" id="CALLERID" value = "58713780" >\n
<input{disable} style = "display:none" id = "GR_BUS" value = "VGH1"\n >
< td >< inputid = "label"{disable}style = "font-size: 9px;width: 100 %;margin: 0;padding: 1;" type=text></td>
</form>>'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(line, "lxml")
for values in soup.findAll("input"):
id = values["id"]
value = values["value"]
print(id, value)
输出:
('CALLERID', '58713780')
('GR_BUS', 'VGH1')
答案 1 :(得分:0)
首先,您的示例中的内容不是有效的XML,而是HTML。考虑到字符串中的{disable}指令,更可能是HTML模板。
其次,您的正则表达式无效,因为它没有考虑id属性周围的引号。我还假设您还需要一个值属性的捕获组,以便构建您的最终结果并考虑该值并不总是存在(即在标签ID的情况下)。
执行该操作的正则表达式为{{1}}。对于每个匹配,第一个捕获组将包含id属性的值,第三个组(如果存在)将包含value属性的值。
您可以通过选择python作为语言在https://regex101.com进行测试。