正则表达式系列(四):反向分组

准备说明

1.实例中正则表达式来源于《精通正则表达式》一书

2.正则表达式实现方式为Python3.7


反向分组

反向分组是匹配在正则表达式中分组的内容,用\number表示,number从1开始,等同于调用group(number)的值, 在匹配标签内容中特别有用。

import re





def main():

    s = 'this <I>short</I>.'

    pattern = re.compile(r'<(\w+)>(\w+)</\1>')

    m = re.search(pattern, s)

    print(m)

    print(m.group(2))





if __name__ == '__main__':

    main()


标签都是成对出现的,上面\1匹配第一个<>中的内容,\2匹配标签中的内容。


运行结果

<re.Match object; span=(5, 17), match='<I>short</I>'>

short


应用

反向分组还可以查找重复单词或者去重操作

import re





def main():

    s1 = 'the the'

    s2 = 'the theory'

    pattern = re.compile(r'\b([a-z]+)\s+\1\b', re.I)

    m1 = re.search(pattern, s1)

    print(m1)

    m2 = re.search(pattern, s2)

    print(m2)

    ns = re.sub(pattern, r'\1', s1)

    print(ns)

    ns2 = re.sub(pattern, r'\1', s2)

    print(ns2)





if __name__ == '__main__':

    main()


上面加\b是为去除重复的单词,而不是重复的内容。所有表达式可以匹配s1,不能匹配s2

<re.Match object; span=(0, 7), match='the the'>

None

the

the theory

展开阅读全文