如何用正则仅移除XML标签中的连字符?
解决XML标签内连字符的精准移除问题
嘿Andrea!我懂你遇到的问题——你写的(?<=\w)-(?=\w)确实能匹配所有字母数字间的连字符,但没法区分标签内外,这就很头疼对吧?
其实只要给你的正则加上标签范围的环视约束,就能精准锁定<>内部的目标连字符了。试试这个正则:
(?<=<[^>]*\w)-(?=\w[^>]*>)
拆解一下这个正则的逻辑:
(?<=<[^>]*\w):反向预查,确保连字符前面是<开头,中间是任意非>的字符(意味着还在标签内部),最后紧跟一个字母数字\w-:就是你要移除的那个目标连字符(?=\w[^>]*>):正向预查,确保连字符后面是一个字母数字\w,接着是任意非>的字符,最后以>收尾(确保仍在标签内部)
举个实际的例子:
原始内容:<text-numbers>hello-world</text-numbers>
替换后:<textnumbers>hello-world</textnumbers>
你看,标签里的-被移除了,但文本里的hello-world完全不受影响,完美符合你的需求!
如果用Python来实现的话,代码大概是这样:
import re # 损坏的XML内容 broken_xml = "<user-id>my-name-is-andrea</user-id><product-code>abc-123-def</product-code>" # 执行替换 fixed_xml = re.sub(r'(?<=<[^>]*\w)-(?=\w[^>]*)', '', broken_xml) print(fixed_xml) # 输出:<userid>my-name-is-andrea</userid><productcode>abc-123-def</productcode>
这个方案能处理标签内多个连字符的情况,也不会误碰标签外的内容,应该能帮你搞定XML修复的问题啦!
内容的提问来源于stack exchange,提问作者Akylle
相关产品推荐
相关产品推荐

