小叁疯丶 2024-05-10 19:05 采纳率: 85.7%
浏览 3

python re表达式问题

我正在学习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],[链接]”,
可以看到寻找的表达式已经复杂了,我该如何修改表达式或者是否有更加简单的方法来处理这种情况呢?

  • 写回答

2条回答 默认 最新

  • 专家-皆知 2024-05-10 19:05
    关注

    使用Python的re模块进行正则匹配,将相关联的信息从essay_link中提取出来,并与essay_info对应。

    以上回复有部分引自免费微信小程序:皆我百晓生。 如问题尚未解决,还请稍待,如有疑问请回复进一步沟通。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月10日

悬赏问题

  • ¥15 soildworks装配体的尺寸问题
  • ¥100 有偿寻云闪付SDK转URL技术
  • ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
  • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
  • ¥15 远程安装一下vasp
  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑