python
a="32<2>fdssa</2>ffdsa32" re.sub(r'<(\d+)>|</(\d+)>',"item",a)
result:'32itemfdssaitemffdsa32'
如何正确替换得到结果:
a="32<item>
fdssa</item>
ffdsa32"
python
a="32<2>fdssa</2>ffdsa32" re.sub(r'<(\d+)>|</(\d+)>',"item",a)
result:'32itemfdssaitemffdsa32'
如何正确替换得到结果:
a="32<item>
fdssa</item>
ffdsa32"
由于look-behind requires fixed-width pattern
,就是这个(?<=<|\/)
无法写成(?<=<|<\/)
这个形式。
所以,下面的只能凑合着用
re.sub(r'(?<=<|/)\d+(?=>)',"item",a)
下面的答案给了我提示:
re.sub(r'(<\s*\/?\s*)\d+(\s*>)', r'\1item\2', a)
美女,给你两个解法
第一个是用non-greedy match:
In [1]: re.sub(r'<(/?)\d+>+?',"<\g<1>item>","32<2>fdssa</2>ffdsa32")
Out[1]: '32<item>fdssa</item>ffdsa32'
另外一个是传个函数进去:
def repl(match):
if match.group(1):
return "<item>"
elif match.group(2):
return "</item>"
else:
return ""
re.sub(r'(<\d+>)+?|(</\d+>)+?',repl,"32<2>fdssa</2>ffdsa32")
==>'32<item>fdssa</item>ffdsa32'
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
这样?