Python——循環遍歷多個列表實現字符的組合拼接
目標:給定泛化的句式文件regex.txt,組合生成query
參考解決技巧:一日一技:如何用Python遍歷多個列表元素的所有組合
regex.txt的內容:
小張(來|背|背誦|讀)+(一段|一首|幾首|一條)我喜歡的(唐詩|宋詞|元曲)吧
立馬(刪掉|關閉|退出)剛纔我打開的+(網頁|頁面|腳本)
(一杯|一瓶|一盆)+(奶茶|喜茶|奈雪的茶|一點點)+(多謝)
Python代碼:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
@Time :2019/8/10
@Name :ZhangWei
@Contact :[email protected]
@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)
運行結果:
小張來一段我喜歡的唐詩吧
小張來一段我喜歡的宋詞吧
小張來一段我喜歡的元曲吧
小張來一首我喜歡的唐詩吧
小張來一首我喜歡的宋詞吧
小張來一首我喜歡的元曲吧
小張來幾首我喜歡的唐詩吧
小張來幾首我喜歡的宋詞吧
小張來幾首我喜歡的元曲吧
小張來一條我喜歡的唐詩吧
小張來一條我喜歡的宋詞吧
小張來一條我喜歡的元曲吧
小張背一段我喜歡的唐詩吧
小張背一段我喜歡的宋詞吧
小張背一段我喜歡的元曲吧
小張背一首我喜歡的唐詩吧
小張背一首我喜歡的宋詞吧
小張背一首我喜歡的元曲吧
小張背幾首我喜歡的唐詩吧
小張背幾首我喜歡的宋詞吧
小張背幾首我喜歡的元曲吧
小張背一條我喜歡的唐詩吧
小張背一條我喜歡的宋詞吧
小張背一條我喜歡的元曲吧
小張背誦一段我喜歡的唐詩吧
小張背誦一段我喜歡的宋詞吧
小張背誦一段我喜歡的元曲吧
小張背誦一首我喜歡的唐詩吧
小張背誦一首我喜歡的宋詞吧
小張背誦一首我喜歡的元曲吧
小張背誦幾首我喜歡的唐詩吧
小張背誦幾首我喜歡的宋詞吧
小張背誦幾首我喜歡的元曲吧
小張背誦一條我喜歡的唐詩吧
小張背誦一條我喜歡的宋詞吧
小張背誦一條我喜歡的元曲吧
小張讀一段我喜歡的唐詩吧
小張讀一段我喜歡的宋詞吧
小張讀一段我喜歡的元曲吧
小張讀一首我喜歡的唐詩吧
小張讀一首我喜歡的宋詞吧
小張讀一首我喜歡的元曲吧
小張讀幾首我喜歡的唐詩吧
小張讀幾首我喜歡的宋詞吧
小張讀幾首我喜歡的元曲吧
小張讀一條我喜歡的唐詩吧
小張讀一條我喜歡的宋詞吧
小張讀一條我喜歡的元曲吧
立馬刪掉剛纔我打開的網頁
立馬刪掉剛纔我打開的頁面
立馬刪掉剛纔我打開的腳本
立馬關閉剛纔我打開的網頁
立馬關閉剛纔我打開的頁面
立馬關閉剛纔我打開的腳本
立馬退出剛纔我打開的網頁
立馬退出剛纔我打開的頁面
立馬退出剛纔我打開的腳本
一杯奶茶多謝
一杯喜茶多謝
一杯奈雪的茶多謝
一杯一點點多謝
一瓶奶茶多謝
一瓶喜茶多謝
一瓶奈雪的茶多謝
一瓶一點點多謝
一盆奶茶多謝
一盆喜茶多謝
一盆奈雪的茶多謝
一盆一點點多謝