求Python正则表达式:提取文本中含RQ的XML标签内容
提取含“RQ”的XML标签内容的Python正则表达式
问题分析
你之前的正则表达式失效的核心原因:
- 开始标签与结束标签的名称未关联,可能匹配到不对应的闭合标签
- 标签名匹配逻辑不严谨,会误捕获标签内的属性内容
正确正则表达式方案
使用带反向引用的正则,确保首尾标签名称一致,同时准确匹配标签属性与内部内容:
import re # 示例文本 text = """ <ServiceRQ>want everything between...</ServiceRQ> <ServiceRQ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">want everything between</ServiceRQ> """ # 正则模式 pattern = r"<([^\s>]+RQ)([^>]*)>(.*?)</\1>" # 查找所有匹配项,re.DOTALL允许.匹配换行符 matches = re.findall(pattern, text, re.DOTALL) # 输出结果 for idx, match in enumerate(matches, 1): full_tag = f"<{match[0]}{match[1]}>{match[2]}</{match[0]}>" print(f"{idx}. {full_tag}")
正则模式拆解
<([^\s>]+RQ):捕获以RQ结尾的标签名称,[^\s>]+确保只匹配标签名(排除空格和>,避免误取属性)([^>]*):匹配标签内的所有属性内容(比如xmlns:xsi="...")(.*?):非贪婪匹配标签中间的文本内容</\1>:通过反向引用\1,确保结束标签和开始标签的名称完全一致
输出结果
运行代码后将得到你期望的结果:
1. <ServiceRQ>want everything between...</ServiceRQ> 2. <ServiceRQ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">want everything between</ServiceRQ>
注意:如果XML存在标签嵌套场景,正则无法可靠处理,建议使用专业XML解析库(如
xml.etree.ElementTree)。
内容的提问来源于stack exchange,提问作者Akash
相关产品推荐
相关产品推荐

