在Python中使用正则表达式,我试图删除字符串中的所有XML类型元素,除了那些包含QUOTE的元素,例如<QUOTE>
, </QUOTE>
or <QUOTE A="B">
应该保留,但其他诸如<EXAMPLE>
or <TEST A="B">
应该被删除。我创建了这个,它替换了所有元素,但无法计算出 not 部分:
re.sub(r'</?[\w= \-"]+>', '', s)
有人有什么想法吗?
我相信否定的前瞻断言会满足您的需求:
import re
regex = r'<(?!/?QUOTE\b)[^>]+>'
tests = [
'a plain old string',
'a string with <SOME> <XML TAGS="stuff">',
'a string with <QUOTE>, </QUOTE>, and <QUOTE with="data">',
'a string that has <QUOTEA> tags </QUOTEB>',
]
for i in tests:
result = re.sub(regex, '', i)
print('{}\n{}\n'.format(i, result))
编辑:它是如何工作的
前瞻断言,顾名思义,在匹配的字符串中“前瞻”,但不消耗它们匹配的字符。你可以做积极的事((?=...)
) 和负 ((?!...)
) 前瞻。 (也有积极和消极的回顾断言。)
所以,显示的正则表达式匹配<
对于标签的开头,然后对QUOTE
带有可选的/
在它之前(/?
) 及其后面的单词边界 (\b
)。如果匹配,则正则表达式不匹配,并且该标记将被忽略。如果不匹配,正则表达式会继续吃掉一个或多个非>
人物和结尾>
。我想你可能也想让它吃掉标签后面的任何空格——我没有这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)