Python——循环遍历多个列表实现字符的组合拼接

                                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)

运行结果:

小张来一段我喜欢的唐诗吧
小张来一段我喜欢的宋词吧
小张来一段我喜欢的元曲吧
小张来一首我喜欢的唐诗吧
小张来一首我喜欢的宋词吧
小张来一首我喜欢的元曲吧
小张来几首我喜欢的唐诗吧
小张来几首我喜欢的宋词吧
小张来几首我喜欢的元曲吧
小张来一条我喜欢的唐诗吧
小张来一条我喜欢的宋词吧
小张来一条我喜欢的元曲吧
小张背一段我喜欢的唐诗吧
小张背一段我喜欢的宋词吧
小张背一段我喜欢的元曲吧
小张背一首我喜欢的唐诗吧
小张背一首我喜欢的宋词吧
小张背一首我喜欢的元曲吧
小张背几首我喜欢的唐诗吧
小张背几首我喜欢的宋词吧
小张背几首我喜欢的元曲吧
小张背一条我喜欢的唐诗吧
小张背一条我喜欢的宋词吧
小张背一条我喜欢的元曲吧
小张背诵一段我喜欢的唐诗吧
小张背诵一段我喜欢的宋词吧
小张背诵一段我喜欢的元曲吧
小张背诵一首我喜欢的唐诗吧
小张背诵一首我喜欢的宋词吧
小张背诵一首我喜欢的元曲吧
小张背诵几首我喜欢的唐诗吧
小张背诵几首我喜欢的宋词吧
小张背诵几首我喜欢的元曲吧
小张背诵一条我喜欢的唐诗吧
小张背诵一条我喜欢的宋词吧
小张背诵一条我喜欢的元曲吧
小张读一段我喜欢的唐诗吧
小张读一段我喜欢的宋词吧
小张读一段我喜欢的元曲吧
小张读一首我喜欢的唐诗吧
小张读一首我喜欢的宋词吧
小张读一首我喜欢的元曲吧
小张读几首我喜欢的唐诗吧
小张读几首我喜欢的宋词吧
小张读几首我喜欢的元曲吧
小张读一条我喜欢的唐诗吧
小张读一条我喜欢的宋词吧
小张读一条我喜欢的元曲吧
立马删掉刚才我打开的网页
立马删掉刚才我打开的页面
立马删掉刚才我打开的脚本
立马关闭刚才我打开的网页
立马关闭刚才我打开的页面
立马关闭刚才我打开的脚本
立马退出刚才我打开的网页
立马退出刚才我打开的页面
立马退出刚才我打开的脚本
一杯奶茶多谢
一杯喜茶多谢
一杯奈雪的茶多谢
一杯一点点多谢
一瓶奶茶多谢
一瓶喜茶多谢
一瓶奈雪的茶多谢
一瓶一点点多谢
一盆奶茶多谢
一盆喜茶多谢
一盆奈雪的茶多谢
一盆一点点多谢

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值