我正在学习python
我有两个列表,essay_info 里面装的是文章的表头信息,包括文章标题,作者,章节(当然也可能是没有章节的),另外一个列表 essay_link里面装的与essay_info 中对应的文章链接,如下
essay_info = ["【文章111】第1章 【作者:aa】","【文章111】第2章 【作者:aa】",
"【文章1】续写1章 【作者:bb】","【文章1】续写2章 【作者:bb】",
"【文章1】续写83章 【作者:bb】","【文章2】(18-23) 【作者:zhangsan】",
"【文章2】(1-18) 【作者:zhangsan】","【文章3】(08-16)【作者:Pierrot】",
"【文章3】(01-08)【作者:Pierrot】","【文章4】(上)【作者:李四】","【文章4】(中)【作者:李四】",
"【文章4】(下)【作者:李四】",
"【文章07】【作者:王五】","【文章09】(全文+番外)【作者:王六】","【文章08】(全文)【作者:王七】",
"【文章08】(番外)【作者:王六】"
,"【文章10】(01)【作者:test01】","【文章10】(02)【作者:test01】","【文章12】(卷一1-8)【作者:test02】",
"【文章12】(卷一8-10)【作者:test02】","【文章12】(卷二1-8)【作者:test02】",
"【文章12】(卷二8-10)【作者:test02】"]
essay_link = ["www.xxx01.com","www.xxx02.com","www.xxx03.com","www.xxx04.com","www.xxx05.com","www.xxx06.com","www.xxx07.com",
"www.xxx08.com","www.xxx09.com","www.xxx010.com","www.xxx015","www.xxx016","www.xxx017","www.xxx020","www.xxx016","www.xxx017","www.xxx020"
,"www.xxx021","www.xxx022","www.xxx021","www.xxx022","www.xxx021","www.xxx022"]
我想要定义一个字典,键是文章的标题,值是一个列表,把这篇文章的章节和连接都放进去,但是正如你所见,essay_info 里面的内容是杂乱无章的,虽然我们人一眼就能看出哪些哪些内容是同一章,但是它没有规律,于是我定义了如下的规则来找到目标:
title来找到文章的标题,chapter来找到章节,author来找到作者,
def parse_info(info, link):
title = re.search(r"【(.*?)】", info).group(1)
chapter = re.findall(r"卷.\d+-\d+|卷.\(\d+\)|[上中下]|续写\d+章|全文\+番外|全文|番外|\(\d+\)|第\d+章", info) or ['全文']
author = re.search(r"【作者:(.*?)】", info).group(1)
return author, title, [(chap, link) for chap in chapter]
接着对章节进行排序,这样才符合我们的期望:
def sort_chapters(chapters):
return sorted(chapters, key=lambda x: (int(x[0][2:].split('-')[0]) if '卷' in x[0] else (int(x[0].split('-')[0]) if '-' in x[0] else (int(x[0][2:-1]) if '续写' in x[0] else (int(x[0][1:-1]) if '(' in x[0] else (int(x[0][1:-1]) if '第' in x[0] else {'上': 0, '中': 1, '下': 2, '全文': 3, '全文+番外': 4, '番外': 5}[x[0]]))))))
接着输出,问题就出现了
[aa]:[文章111],[第81章],[www.xxx01.com]
[aa]:[文章111],[第82章],[www.xxx02.com]
[bb]:[文章1],[续写81章],[www.xxx03.com]
[bb]:[文章1],[续写82章],[www.xxx04.com]
[bb]:[文章1],[续写83章],[www.xxx05.com]
[zhangsan]:[文章2],[全文],[www.xxx06.com]
[zhangsan]:[文章2],[全文],[www.xxx07.com]
……
……
[test02]:[文章12],[卷一1-8],[www.xxx022]
[test02]:[文章12],[卷二1-8],[www.xxx022]
[test02]:[文章12],[卷一8-10],[www.xxx021]
[test02]:[文章12],[卷二8-10],[www.xxx021]
其中的“[zhangsan]:[文章2],[全文],[链接],[zhangsan]:[文章2],[全文],[链接]”,
我希望它输出的应该是:“[zhangsan]:[文章2],[1-8],[链接],[zhangsan]:[文章2],[08-16],[链接]”,
可以看到寻找的表达式已经复杂了,我该如何修改表达式或者是否有更加简单的方法来处理这种情况呢?