Python re正则表达式替换字符,python正则表达式,python a="32


python a="32<2>fdssa</2>ffdsa32" re.sub(r'<(\d+)>|</(\d+)>',"item",a)
result:'32itemfdssaitemffdsa32'

如何正确替换得到结果:
a="32<item>fdssa</item>ffdsa32"

import rea="32<2>fdssa</2>ffdsa32"re.sub(r'<\d+?>(.+?)</\d+?>', r'<item>\1</item>', a)

re.sub(r'((?<=<)|(?<=</))\d+','item',a)

或者

re.sub(r'((?<=<)|(?<=</))\w+','item',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'

这样?

>> re.sub(r'<\d+>([^<]+)</\d+>', r'<item>\1</item>', '32<2>fdssa</2>ffdsa32')'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)

编橙之家文章,

评论关闭