import re
def find_element_positions(xml_text):
# 用于匹配开始标签
start_tag_pattern = re.compile(r'<element>')
# 用于匹配结束标签
end_tag_pattern = re.compile(r'</element>')
positions = []
start_stack = []
start_index = 0
# 查找所有开始标签的位置
for start_match in start_tag_pattern.finditer(xml_text):
start_stack.append(start_match.start())
# 查找所有结束标签的位置
for end_match in end_tag_pattern.finditer(xml_text):
if start_stack:
start = start_stack.pop()
positions.append((start, end_match.end()))
return positions
xml_text = '<root><element>content1</element><element>content2<sub - element>subcontent1</sub - element></element><element>content3</element></root>'
result = find_element_positions(xml_text)
for pos in result:
print(f"起始位置: {pos[0]}, 结束位置: {pos[1]}")
- 首先定义了两个正则表达式
start_tag_pattern
和end_tag_pattern
,分别用于匹配<element>
开始标签和</element>
结束标签。
- 使用
start_stack
栈来存储开始标签的位置。
- 通过
finditer
方法查找所有开始标签和结束标签的位置。
- 每当找到一个结束标签时,从栈中弹出一个开始标签的位置,组成一个元组表示
<element>
标签及其内部内容的起始和结束位置,并添加到positions
列表中。
- 最后返回所有
<element>
标签及其内部内容的位置列表,并进行打印展示。