gpt4 book ai didi

python 如何检查打开和关闭标签

转载 作者:太空宇宙 更新时间:2023-11-03 16:52:00 25 4
gpt4 key购买 nike

我有一个类似 XML 的文件,但它不是 XML 或 HTML。

文件示例:

<config-file>
name myconfig
date 3-2-2016
</config-file>
<client>
<"ABC - CDE & 123">
</"ABC - CDE & 123">
</client>

我们经常编辑这个文件并弄乱打开或关闭。要么不关闭,要么甚至错过位置“<”或“>”。尝试找到一种好方法来解析文件以确保它已打开和关闭。我在想:

1-循环遍历每一行并记录它是否以以下开头 < + any characters >并确保它有一个关闭 </ + any characters>如果不存在,则会抛出模式错误。

欢迎任何帮助。

最佳答案

你已经具备了基础知识。您只关心三种情况:

  1. 开始标签
  2. 结束标签
  3. 其他一切(忽略)

使用正则表达式查找开始和结束标签;确保begin表达式排除斜线作为第二个字符。现在,创建一个简单的堆栈:一个字符串列表就可以了。该列表将包含开放标签。

行动:

  • 开始标签:提取标签(去掉尖括号)。将其推到列表的前面。
  • 结束标签:提取标签(去掉尖括号和前斜杠)。检查该标签是否与列表前面的相同。如果是这样,弹出它。如果不是,则发出错误消息。如果列表中没有任何内容,则表明有人试图在没有任何打开的标签时关闭该标签;发布消息。
  • EOF:当输入用完时,检查列表。任何剩余的字符串都是未闭合的标签。发布消息。

请注意,这还为您提供了一些恢复的可能性。您可以扫描列表以查看无效的结束标记是否与堆栈中更下方的内容相匹配。这表明 block 重叠。您可以查找接近的匹配项,以提示拼写错误。如果您关闭但无法打开,您可以发出一条消息并忽略它。这些步骤使您有机会发现多个错误。

哦,到底是什么...我已经这样做了足够多次了...

stack = []

with open("parse_test_1.txt", 'r') as parse_file:
for line in parse_file:
print "INPUT LINE:", line
ltag = line.find('<')
if ltag > -1:
rtag = line.find('>')
if rtag > -1:
# Found left and right brackets: grab tag
tag = line[ltag+1: rtag]
open_tag = tag[0] != '/'
if open_tag:
# Add tag to stack
stack.append(tag)
print "TRACE open", stack
else:
tag = tag[1:]
if len(stack) == 0:
print "No blocks are open; tried to close", tag
else:
if stack[-1] == tag:
# Close the block
stack.pop()
print "TRACE close", tag, stack
else:
print "Tried to close", tag, "but most recent open block is", stack[0]
if tag in stack:
stack.remove(tag)
print "Prior block closed; continuing"

if len(stack):
print "Blocks still open at EOF:", stack

关于python 如何检查打开和关闭标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35761133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com