如何优化正则提取电影记录中ID与可选年份/类型间的标题内容
电影列表解析正则优化方案
优化后正则
^(\d+),\s*"?([^"]*?)"?\s*(?:\((\d{4})\))?\s*,(.*)$
默认4个捕获组依次对应:电影ID、电影标题、上映年份(无年份则为空)、电影类型,你可根据需求调整分组规则。
正则逻辑说明
^(\d+):匹配行首的数字ID,作为第一个捕获组,\s*"?:匹配ID后的分隔逗号,跳过后续可能存在的空格、包裹标题的双引号前缀([^"]*?):非贪婪匹配标题内容,遇到双引号就终止匹配,既适配双引号包裹的标题行,也不会误把标题内部的小括号内容识别成年份"?\s*:匹配包裹标题的双引号后缀,以及后续可能存在的空格(?:\((\d{4})\))?:可选匹配年份段,只有括号内是4位数字的内容才会被识别为年份,年份值为第三个捕获组,外层加非捕获标记避免产生多余分组\s*,:匹配年份后的空格、分隔标题与类型字段的逗号(.*)$:匹配行尾所有类型字段内容,作为第四个捕获组
测试用例匹配验证
针对你提供的测试数据,匹配结果完全符合预期:
| ID | 标题 | 年份 | 类型 |
|---|---|---|---|
| 1 | Ace Ventura: When Nature Calls | 1995 | Comedy |
| 20 | Money Train | 1995 | Action |
| 22 | Copycat | 空 | Crime |
| 24 | Powder | 1995 | Drama |
| 25 | Leaving (5) Las Vegas | 空 | Drama |
补充说明
如果你的数据中存在标题本身包含4位数字括号(非年份)的场景,可以将正则调整为优先匹配靠近类型分隔逗号的4位括号,修改后正则如下:
^(\d+),\s*"?(.*?)"?\s*(?:\((\d{4})\))?\s*,(.*)$
如果CSV字段存在更复杂的转义场景,更建议使用专用的CSV解析库处理,稳定性优于正则匹配。
内容的提问来源于stack exchange,提问作者apivanushkin
相关产品推荐
相关产品推荐

