代码中使用了 re 模块,这是 Python 的一个内置模块,可以用来处理正则表达式。正则表达式是一种用来匹配字符串的模式,可以用来检查一个字符串是否包含某些子串,或者是否符合某种格式。代码中使用了以下的正则表达式:
((.)\2(.)\3):这个表达式匹配 AABB 型的字符串,即由两个相同的字符和另外两个相同的字符组成的字符串。例如,嘻嘻哈哈,哗哗啦啦等。
代码中的 \1 \2 \3 分别代表正则表达式中的分组,也就是用括号 () 包围的部分。\1 代表第一个分组(就是整个表达式本身),\2 代表第二个分组,\3 代表第三个分组。
import re
with open('chengyu.txt', 'r') as f: # 打开文件并读取内容
words = f.read().split() # 将文件内容按空格分割成列表
# 定义不同类型的成语列表,并在第一个元素标明类型
AABB = ['AABB']
pattern_AABB = r'((.)\2(.)\3)' # 定义 AABB 型的正则表达式
AABC = ['AABC']
pattern_AABC = r'((.)\2(.)(.))' # 定义 AABC 型的正则表达式
ABAC = ['ABAC']
pattern_ABAC = r'((.)(.)\2(.))' # 定义 ABAC 型的正则表达式
ABBA = ['ABBA']
pattern_ABBA = r'((.)(.)\3\2)' # 定义 ABBA 型的正则表达式
ABBC = ['ABBC']
pattern_ABBC = r'((.)(.)\3(.))' # 定义 ABBC 型的正则表达式
ABCB = ['ABCB']
pattern_ABCB = r'((.)(.)(.)\3)' # 定义 ABCB 型的正则表达式
for word in words: # 遍历每个词语
if re.match(pattern_AABB, word): # 如果匹配 AABB 型
AABB.append(word) # 将词语添加到 AABB 列表中
elif re.match(pattern_AABC, word): # 如果匹配 AABC 型
AABC.append(word) # 将词语添加到 AABC 列表中
elif re.match(pattern_ABAC, word): # 如果匹配 ABAC 型
ABAC.append(word) # 将词语添加到 ABAC 列表中
elif re.match(pattern_ABBA, word): # 如果匹配 ABBA 型
ABBA.append(word) # 将词语添加到 ABBA 列表中
elif re.match(pattern_ABBC, word): # 如果匹配 ABBC 型
ABBC.append(word) # 将词语添加到 ABBC 列表中
elif re.match(pattern_ABCB, word): # 如果匹配 ABCB 型
ABCB.append(word) # 将词语添加到 ABCB 列表中
print(AABB) # 打印 AABB 列表
print(AABC) # 打印 AABC 列表
print(ABAC) # 打印 ABAC 列表
print(ABBA) # 打印 ABBA 列表
print(ABBC) # 打印 ABBC 列表
print(ABCB) # 打印 ABCB 列表