Python——循环遍历多个列表实现字符的组合拼接
目标:给定泛化的句式文件regex.txt,组合生成query
参考解决技巧:一日一技:如何用Python遍历多个列表元素的所有组合
regex.txt的内容:
小张(来|背|背诵|读)+(一段|一首|几首|一条)我喜欢的(唐诗|宋词|元曲)吧
立马(删掉|关闭|退出)刚才我打开的+(网页|页面|脚本)
(一杯|一瓶|一盆)+(奶茶|喜茶|奈雪的茶|一点点)+(多谢)
Python代码:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
@Time :2019/8/10
@Name :ZhangWei
@Contact :1223242863@qq.com
@File :regex2list.py
@Software :Pycharm
"""
import re
import itertools
# 遍遍历多个列表元素的所有组合
class Regex2List(object):
def __init__(self, regex_path, regex_list):
self.regex_path = regex_path
self.regex_list = regex_list
@staticmethod
def get_list(str_list):
res, data = [], ['']
for line in str_list:
if line == '':
continue
else:
data = itertools.product(data, line.split('|'))
for result in data:
res.append(''.join(re.findall(r'[\u4e00-\u9fa5]', str(result))))
return res
def run(self):
res_list = []
with open(self.regex_path, 'r', encoding='utf-8') as file:
for line in file:
data = re.split("|".join(self.regex_list), line[:-1])
for res in self.get_list(data):
res_list.append(res)
return res_list
if __name__ == "__main__":
rl = Regex2List(regex_path="regex.txt", regex_list=["\(", "\)", "\+", "\(", "\)"])
for res in rl.run():
print(res)
运行结果:
小张来一段我喜欢的唐诗吧
小张来一段我喜欢的宋词吧
小张来一段我喜欢的元曲吧
小张来一首我喜欢的唐诗吧
小张来一首我喜欢的宋词吧
小张来一首我喜欢的元曲吧
小张来几首我喜欢的唐诗吧
小张来几首我喜欢的宋词吧
小张来几首我喜欢的元曲吧
小张来一条我喜欢的唐诗吧
小张来一条我喜欢的宋词吧
小张来一条我喜欢的元曲吧
小张背一段我喜欢的唐诗吧
小张背一段我喜欢的宋词吧
小张背一段我喜欢的元曲吧
小张背一首我喜欢的唐诗吧
小张背一首我喜欢的宋词吧
小张背一首我喜欢的元曲吧
小张背几首我喜欢的唐诗吧
小张背几首我喜欢的宋词吧
小张背几首我喜欢的元曲吧
小张背一条我喜欢的唐诗吧
小张背一条我喜欢的宋词吧
小张背一条我喜欢的元曲吧
小张背诵一段我喜欢的唐诗吧
小张背诵一段我喜欢的宋词吧
小张背诵一段我喜欢的元曲吧
小张背诵一首我喜欢的唐诗吧
小张背诵一首我喜欢的宋词吧
小张背诵一首我喜欢的元曲吧
小张背诵几首我喜欢的唐诗吧
小张背诵几首我喜欢的宋词吧
小张背诵几首我喜欢的元曲吧
小张背诵一条我喜欢的唐诗吧
小张背诵一条我喜欢的宋词吧
小张背诵一条我喜欢的元曲吧
小张读一段我喜欢的唐诗吧
小张读一段我喜欢的宋词吧
小张读一段我喜欢的元曲吧
小张读一首我喜欢的唐诗吧
小张读一首我喜欢的宋词吧
小张读一首我喜欢的元曲吧
小张读几首我喜欢的唐诗吧
小张读几首我喜欢的宋词吧
小张读几首我喜欢的元曲吧
小张读一条我喜欢的唐诗吧
小张读一条我喜欢的宋词吧
小张读一条我喜欢的元曲吧
立马删掉刚才我打开的网页
立马删掉刚才我打开的页面
立马删掉刚才我打开的脚本
立马关闭刚才我打开的网页
立马关闭刚才我打开的页面
立马关闭刚才我打开的脚本
立马退出刚才我打开的网页
立马退出刚才我打开的页面
立马退出刚才我打开的脚本
一杯奶茶多谢
一杯喜茶多谢
一杯奈雪的茶多谢
一杯一点点多谢
一瓶奶茶多谢
一瓶喜茶多谢
一瓶奈雪的茶多谢
一瓶一点点多谢
一盆奶茶多谢
一盆喜茶多谢
一盆奈雪的茶多谢
一盆一点点多谢