你是国际会议上的一名舞台报幕员。 你的工作是介绍演讲者、在他们时间到时提醒他们,并主持问答环节。 你会提前拿到一份你负责的舞台上的演讲者名单,需要把它做成主持卡。
由于这份名单遵循特定的格式,你决定写一个短小的程序,用正则表达式(regex)解析拿到的名单,并自动生成主持卡。
这个练习的重点不是学习正则表达式。 而是学习如何在 $lang 中使用正则表达式。 提示里有一个现成的正则表达式,如果你不想自己写,可以直接用。
你拿到的名单中,每场演讲都包含以下信息:
一条完整的记录格式如下:
»Speedrunning 101« – Sasha Duda Krall (they/them), from GDQU. Start: 13:00, Q&A: 13:20, End: 13:30
这里,标题是 Speedrunning 101,演讲者叫 Sasha Duda Krall,来自 GDQU,使用的代词是 they/them。
演讲在 13:00 开始,问答环节从 13:20 开始,整个环节在 13:30 结束。
由于姓名中可能包含普通连字符 -,这里用短破折号 – 来分隔演讲者和演讲名称。
你的程序为这场演讲生成的主持卡如下所示:
- Our next speaker is Sasha Duda Krall, from GDQU
- Their talk is called »Speedrunning 101«
- They will answer your questions in the Q&A session at the end of the talk, starting at 13:20
13:00 - 13:20 - 13:30
完整的名单可能如下所示:
»Speedrunning 101« – Sasha Duda Krall (they/them), from GDQU. Start: 13:00, Q&A: 13:20, End: 13:30
»How I learned to say Farewell« – Madeline (she/her). Start: 13:40, Q&A: 14:00, End: 14:05
»How To Find a Good Title For Your Conference Talk« – Vítězslav Kruse (he/him). Start: 14:15, End: 14:40
»Why Emoji Matter❣« – Ash van Amelsvoort, from the University of 🧬🧪⚛. Start: 14:50, Q&A: 15:05, End: 15:10
»Can dogs look up?« – Kira "k1ralli" Sørensen. Start: 20:50, Q&A: 21:05, End: 21:10
对应的主持卡是:
- Our next speaker is Madeline
- Her talk is called »How I learned to say Farewell«
- She will answer your questions in the Q&A session at the end of the talk, starting at 14:00
13:40 - 14:00 - 14:05
- Our next speaker is Vítězslav Kruse
- His talk is called »How To Find a Good Title For Your Conference Talk«
- There will not be a Q&A session
14:15 - NO Q&A - 14:40
- Our next speaker is Ash van Amelsvoort, from the University of 🧬🧪⚛
- Ash's talk is called »Why Emoji Matter❣«
- Ash will answer your questions in the Q&A session at the end of the talk, starting at 15:05
14:50 - 15:05 - 15:10
- Our next speaker is Kira "k1ralli" Sørensen
- Kira's talk is called »Can dogs look up?«
- Kira will answer your questions in the Q&A session at the end of the talk, starting at 21:05
20:50 - 21:05 - 21:10
这里需要注意几点:
最简单的方法是用 regex101 或 RegExr 这样的正则表达式构建工具。
!!! warning 确保把正则表达式引擎/方言设置为 $CHANGE_ME。
如果你是正则表达式的新手,或者难以一下子写出一个能捕获所有必需信息的表达式,也可以定义几个更小的表达式,分别捕获其中的一部分信息。
使用第一部分的正则表达式,实现一个函数:接收一行文本作为输入,从中捕获信息,并按上面的规范返回生成的主持卡。
未来可能的测试用例应遵循以下准则:
»«,姓名中不应包含逗号。[a-zA-Z] 之类的方式来匹配姓名、标题或机构,就不应该通过测试。