将标题拆分为单独的部分

时间:2009-10-04 10:17:37

标签: regex

我需要一个分割形式的字符串

2,9.1,The Godfather (1972),(这是csv行)

为:

2
9.1
The Godfather
1972

任何有关正常表达的想法?

顺便说一句, 如果你基于你提供的例子知道一个好的正则表达式创建者,那就太好了。 我对此有点新......

10倍!!

5 个答案:

答案 0 :(得分:4)

(\d+)\.(\d+\.\d+),(.*?)(?= \()\((\d{4})\)
^^^^^  ^^^^^^^^^^ ^^^^^^^^^^^^  ^^^^^^^
2      9.1        Title        Year

答案 1 :(得分:1)

我不建议使用正则表达式来拆分csv文件,因为它无法很好地处理逗号转义。但话虽如此,如何使用最简单的可用解决方案?

这样一个最简单的正则表达式可以解决你的问题

'(.*?),(.*?),(.*?)\((\d+)\)'

答案 2 :(得分:0)

Google的一段时间给了我这个: /,(?!(?:[^",]|[^"],[^"])+")/ 。似乎将CSV分割得很好。

>>> '2,9.1,The Godfather (1972)'.split(/,(?!(?:[^",]|[^"],[^"])+")/)
["2", "9.1", "The Godfather (1972)"]

答案 3 :(得分:0)

如果您确定格式是静态的,可以使用:

(\d+),(\d+\.\d+),(.*?) \((\d+)\)

但如果它可以包含更多信息,请使用真正的CSV解析器来读取该行,然后使用The Godfather (1972)拆分(.*?) \((\d+)\)

答案 4 :(得分:0)

CSV有很多极端情况,你的正则表达式方法可能会带你进入一个痛苦的世界。

例如,如果标题中有逗号,则标题将被双引号。这将搞砸到目前为止给出的所有正则表达式。