用匹配文本的长度替换正则表达式匹配

时间:2015-01-10 09:16:10

标签: python regex

如何按<html></mainbody>替换<4></8>等模式。这里4和8是&lt;&gt;内的字母数。 输入将从文件中获取。

import re
def main():
        fh=open("input.txt")
        pattern=re.compile("</?[a-zA-Z]+>") #regular expression to find patterns <html>, </html> 
        for line in fh:
                print(re.sub(pattern,"***",line.strip()))



if __name__=="__main__":main()

1 个答案:

答案 0 :(得分:1)

使用自定义方法返回匹配的长度:

def get_length(obj):
    s = obj.groups()[0]
    return '</{}>'.format(len(s[1:])) if s.startswith('/') else '<{}>'.format(len(s))

>>> re.sub("<(/?[a-zA-Z]+)>", get_length, '<html>')
'<4>'
>>> re.sub("<(/?[a-zA-Z]+)>", get_length, '</html>')
'</4>'

我希望你意识到你的正则表达式是非常基本的,并且它不会处理具有正确属性的标签。