text = '''行尸走肉、金蝉脱壳、百里挑一、金玉满堂、背水一战、霸王别姬、天上人间、不吐不快、海阔天空、情非得已、满腹经纶、兵临城下、春暖花开、插翅难逃、黄道吉日、天下无双、偷天换日、两小无猜、卧虎藏龙、珠光宝气、簪缨世族、花花公子、绘声绘影、国色天香、相亲相爱、八仙过海、金玉良缘、掌上明珠、皆大欢喜、浩浩荡荡、平平安安、秀秀气气、斯斯文文、高兴高兴'''
使用子模式编号的方法编写程序,
(1)同时查找text中ABAC和AABB形式的词语,
(2)分别查找text中ABAC、AABB和ABAB形式的词语,
from re import findalltext = '''行尸走肉、金蝉脱壳、百里挑一、金玉满堂、背水一战、霸王别姬、天上人间、不吐不快、海阔天空、情非得已、满腹经纶、兵临城下、春暖花开、插翅难逃、黄道吉日、天下无双、偷天换日、两小无猜、卧虎藏龙、珠光宝气、簪缨世族、花花公子、绘声绘影、国色天香、相亲相爱、八仙过海、金玉良缘、掌上明珠、皆大欢喜、浩浩荡荡、平平安安、秀秀气气、斯斯文文、高兴高兴'''# 子模式编号——同时匹配print("-子模式编号--同时匹配ABAC和AABB-")pattern_1 = r'(((.).\3.)|((.)\5(.)\6))' # 正则表达式前加r是为了不转义反斜杠后的字符,\3代表此处重复出现子模式3for item in findall(pattern_1, text):print(item[0])# 子模式命名——同时匹配print("-子模式命名--同时匹配ABAC和AABB-")pattern_2 = r'(((?P<f>.)(?P=f)(?P<g>.)(?P=g))|((?P<h>.)(?P<i>.)(?P=h)(?P<j>.)))' # AABB式for item in findall(pattern_2, text):print(item[0])# 子模式编号——分别匹配print("-子模式编号--分别匹配ABAC-")pattern_3 = r'((.).\2.)' # ABAC式for item in findall(pattern_3, text):print(item[0])print("-子模式编号--分别匹配AABB-")pattern_4 = r'((.)\2(.)\3)' # AABB式for item in findall(pattern_4, text):print(item[0])print("-子模式编号--分别匹配ABAB-")pattern_5 = r'((.)(.)\2\3)' # ABAB式for item in findall(pattern_5, text):print(item[0])# 子模式命名——分别匹配print("-子模式命名--分别匹配ABAC-")pattern_6 = r'((?P<f>.)(?P<g>.)(?P=f)(?P<h>.))' # ABAC式for item in findall(pattern_6, text):print(item[0])print("-子模式命名--分别匹配AABB-")pattern_7 = r'((?P<f>.)(?P=f)(?P<g>.)(?P=g))' # AABB式for item in findall(pattern_7, text):print(item[0])print("-子模式命名--分别匹配ABAB-")pattern_8 = r'((?P<f>.)(?P<g>.)(?P=f)(?P=g))' # ABAB式for item in findall(pattern_8, text):print(item[0])
运行结果如下:
如果觉得《分别使用正则表达式的子模式编号和子模式命名两种方法匹配ABAC AABB ABAB式成语》对你有帮助,请点赞、收藏,并留下你的观点哦!