首页 > 解决方案 > 用于复杂字符串的正则表达式

问题描述

我有来自 CSV 文件的行:

  1. 315,《悲惨世界》(1995),戏剧|战争

  2. 315,大恶霸 (1996),喜剧|戏剧

我想拆分行并列出 3 个元素,我需要一个通用的 REGEX 表达式,它在遇到 ',' 的地方进行拆分,但由于标题可能有逗号(如第一行所示),我需要跳过标题解析。带有逗号的标题也有引号,但我需要该表达式适用于这两种情况。可以用 REGEX 来做吗?

我正在尝试自己学习 REGEX,但在理解某些案例时遇到了困难。我真的很感谢你的帮助!

标签: pythonregex

解决方案


如果您尝试解析.csv文件,请不要手动解析,Python 已经有很多库可以为您解析。

否则,如果您的字符串在标题中有逗号时有引号,而在没有逗号时没有,您可以这样做:

>>> x = '315,"Misérables, Les (1995)",Drama|War'
>>> y = '315,Big Bully (1996),Comedy|Drama'
>>> x
'315,"Misérables, Les (1995)",Drama|War'
>>> y
'315,Big Bully (1996),Comedy|Drama'

>>> x.split('"') if len(x.split('"')) == 3 else x.split(',')
['315,', 'Misérables, Les (1995)', ',Drama|War']
>>> y.split('"') if len(y.split('"')) == 3 else y.split(',')
['315', 'Big Bully (1996)', 'Comedy|Drama']

这会将逗号留在第一部分和最后一部分中(如果它被引号分隔),因此您必须在之后手动删除它们。


推荐阅读