如何用Python正则匹配括号前时间码并生成含注释的键值对字典
解决方案
核心正则表达式
针对你给出的场景,最优匹配正则如下:
(\d+:\d+)\s*\(([^)]*)\)
各部分逻辑说明:
(\d+:\d+):第一捕获组,匹配格式为「数字:数字」的时间码,可适配M:SS/MM:SS等常见时间码格式,若需要支持小时级时间码可修改为(\d{1,2}:\d{1,2}(?::\d{1,2})?)\s*\(:匹配时间码与左括号之间的0个或多个空白字符,以及左括号本身([^)]*):第二捕获组,匹配所有非右括号的字符,相比非贪婪匹配性能更优,能准确拿到括号内的全部注释内容\):匹配右括号结束标识
完整实现示例(Python)
import re import html # 示例输入文本 raw_text = '''<p>Example (this is a line that is a string of text:</p> <pre><code>Title of item: 1:33 + 4:55 + 4:32 (this is a note about 4:32) + 5:27 (another "note", I want to keep 3:22-4:50 from 5:27) </code></pre>''' # 执行匹配 matches = re.findall(r'(\d+:\d+)\s*\(([^)]*)\)', raw_text) # 转换为指定结构的字典列表,同时反转义HTML实体 result = [ {"clip": timecode, "notes": html.unescape(note)} for timecode, note in matches ] print(result)
输出结果
[ {'clip': '4:32', 'notes': 'this is a note about 4:32'}, {'clip': '5:27', 'notes': 'another "note", I want to keep 3:22-4:50 from 5:27'} ]
注意事项
- 以上正则默认你的场景中不存在嵌套括号,如果有嵌套括号需求,需要调整为支持递归匹配的正则写法
- 示例中加入了HTML实体反转义处理,对应你输入文本里的
"这类编码内容,不需要可以删除对应逻辑
内容的提问来源于stack exchange,提问作者user1193480
相关产品推荐
相关产品推荐

