使用python和regexp删除字符串中字符串之间的所有xml标记

使用python和regexp删除字符串中字符串之间的所有xml标记,python,regex,Python,Regex,我有字符串: ...<w:t> Name</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="Cambria" w:hAnsi="Cambria"/><w:b/><w:sz w:val="28"/><w:szCs w:val="28"/></w:rPr><w:t>:</w:t></w:r><w:r>

我有字符串:

...<w:t> Name</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="Cambria" w:hAnsi="Cambria"/><w:b/><w:sz w:val="28"/><w:szCs w:val="28"/></w:rPr><w:t>:</w:t></w:r><w:r><w:rPr></w:rPr><w:t xml:space="preserve"> </w:t></w:r><w:r><w:rPr><w:b/><w:bCs/></w:rPr><w:t>{{</w:t></w:r><w:r><w:rPr></w:rPr><w:t xml:space="preserve"> </w:t></w:r><w:r><w:rPr><w:i/><w:iCs/></w:rPr><w:t>test</w:t></w:r><w:r><w:rPr><w:i/><w:iCs/></w:rPr><w:t>.name</w:t></w:r><w:r><w:rPr></w:rPr><w:t xml:space="preserve"> </w:t></w:r><w:r><w:rPr><w:b/><w:bCs/></w:rPr><w:t>}} <w:t>....
。。。名称:{{test.Name}}。。。。
我需要一个脚本,它将删除{{和}之间的所有标记() 但不要在字符对之间删除,例如:

The result of:
{{ <wr> test.name1 <wr> }} <wr><wr> {{ <wr> test.name2 <wr> }} 
will be:
{{ test.name1 }} <wr><wr> {{ test.name2 }} 
not:
{{ test.name1 }} {{ test.name2 }} 
结果:
{{test.name1}{{test.name2}
将:
{{test.name1}{{test.name2}
不是:
{{test.name1}{{test.name2}
提前谢谢你

您可以这样做:

import re

TAG_RE = re.compile(r'\{\{(\s*<[^>]+>|\s*)(\s*.*?\s*)(<[^>]+>\s*|\s*)\}\}')

def remove_tags2(text):
    return TAG_RE.sub('{{ \g<2> }}', text)

remove_tags2("sdfgsd {{ <wr> blablalba sdf asf asga sfas asd </wr> }} <wr><wr> {{<wr>alsdfhaksdhfkajg<wr>}}")
重新导入
TAG\u RE=RE.compile(r'\{(\s*]+>\\s*)(\s*.?\s*)(]+>\s*\\})
def删除标记2(文本):
返回标记_RE.sub('{{\g}}',text)
删除标记2(“sdfgsd{{blablalba sdf asf asga sfas asd}}{{Alsdfhakshdhfkajg}}”)
输出:

'sdfgsd {{  blablalba sdf asf asga sfas asd  }} <wr><wr> {{ alsdfhaksdhfkajg }}'
'sdfgsd{{blablalba sdf asf asga sfas asd}{{alsdfhakshdhfkkajg}}

如果不需要单个正则表达式,可以组合替换:

    import re
    s='{{ <wr> test.name1 <wr> }} <wr><wr> {{ <wr> test.name2 <wr> }}'
    re.sub(r'({{[^{}]+}})', lambda x: re.sub(r'<[a-zA-Z0-9:-]+>', '', x.group(0)), s)
    '{{  test.name1  }} <wr><wr> {{  test.name2  }}'
重新导入
s=“{test.name1}{{test.name2}”
re.sub(r'({{[^{}]+}}'),lambda x:re.sub(r','',x.group(0)),s)
“{test.name1}{{test.name2}”

基于尤金的回答:

import re

s='...<w:t> Name</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="Cambria" w:hAnsi="Cambria"/><w:b/><w:sz w:val="28"/><w:szCs w:val="28"/></w:rPr><w:t>:</w:t></w:r><w:r><$

print re.sub(r'({{[^{}]+}})', lambda x: re.sub(r'<[^>]+>', '', x.group(0)), s)
重新导入

s='。。。姓名:到目前为止你试过什么?有很多网站可以让你快速测试你的正则表达式。例如,或thx!但那个解决方案不适用于问题字符串:(thx!但那个解决方案不适用于问题字符串:(
...<w:t> Name</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="Cambria" w:hAnsi="Cambria"/><w:b/><w:sz w:val="28"/><w:szCs w:val="28"/></w:rPr><w:t>:</w:t></w:r><w:r><w:rPr></w:rPr><w:t xml:space="preserve"> </w:t></w:r><w:r><w:rPr><w:b/><w:bCs/></w:rPr><w:t>{{ test.name }} <w:t>....