我有字符串:
...<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>....
我需要脚本删除{{和}}之间的所有标签(&lt; ...&gt;) 但是不要在字符对之间删除,例如:
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 }}
提前谢谢!
答案 0 :(得分:1)
如果您不需要单个正则表达式,则可以组合替换:
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 }}'
答案 1 :(得分:0)
你可以这样做:
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>}}")
输出:
'sdfgsd {{ blablalba sdf asf asga sfas asd }} <wr><wr> {{ alsdfhaksdhfkajg }}'
答案 2 :(得分:0)
基于尤金回答:
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)
输出:
...<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>....