正则分割<???>并排除<%???>时匹配结果丢失尖括号如何解决
问题原因
Python re.split() 规则:当正则表达式包含捕获分组时,分组匹配到的内容会作为独立元素插入返回的结果列表。你当前的正则 r'<((?!%).+?)>' 仅将尖括号内部的内容放在了捕获分组中,外层的 <、> 不在分组范围内,所以返回结果里只会保留内部文本,丢失尖括号。
解决方法
调整捕获分组的范围,把整个标签(包括尖括号)都包进捕获分组即可,修改后的正则如下:
re.split(r'(<(?!%).+?>)', source_text)
执行结果示例
用上述正则处理你的样例文本,返回结果为:
['「<%sM_item2><%sM_plusnum2>の|\u3000<%sM_slot>の部分を|\u3000<%sM_change_color>に\u3000カラーリングするのですね?|', '<br>', '|「それでは\u3000<%sM_item>が\u300010本と|\u3000<%nM_gold>ゴールドが必要ですが\u3000よろしいですか?|', '<yesno>', '', '<close>', '']
如果不需要将匹配到的标签插入结果列表,仅做分割丢弃标签,把捕获组改成非捕获组即可,正则为 r'<(?!%).+?>'。
内容的提问来源于stack exchange,提问作者jmct
相关产品推荐
相关产品推荐

