0

我有一个已创建的 CSV,它不引用列中的文本注释并包含新行。

带有逗号且没有引号的 csv 正则表达式是一个类似的问题,但他没有另一行或其他列可以解析。

csv 中的一行文本可能如下所示:

    1, 15231, 123123, 1231, word word word, YYYY-MM-DD HH:mm:ss.sss, 13453, **This would be the section with any character for users to communicate and the db stores and 
new lines to record communication**, YYYY-MM-DD HH:mm:ss.sss, User name, 12412413, 01231231, 123,12,,*ASTERIX USED*, YYYY-MM-DD HH:mm:ss.sss

然后另一条新线和类似的东西会解析,

到目前为止,我已经尝试过了

/(\d+?),(\d+?),(\d+?),(\d+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+?),(.+(?=,\d{4})),

但是,如果 csv 的评论部分中有日期参考,我似乎无法超越这些实例。

对正则表达式来说非常新, (?=) 对我来说是新的,因为我必须超越简单的正则表达式模式。

4

1 回答 1

1

如果您知道应该有的确切字段数,则可以使用以下方法:

  • 对于每个不包含逗号的“普通”字段,使用[^,]*
  • 对于可能包含逗号的用户输入字段,请使用.*
  • 用逗号分隔每个字段

例如,如果您有五个总字段并且第三个由用户输入,您将使用以下正则表达式:

([^,]*),([^,]*),(.*),([^,]*),([^,]*)

示例:http ://www.rubular.com/r/E6785bWW0R

如果用户输入的字段可能包含换行符,请确保启用该选项以.匹配换行符(通常是s,或类似的常量DOTALL,在某些语言中,您可以在正则表达式前加上(?s))。或者,只需替换.*[\s\S]*,无论使用何种选项,它都会匹配任何内容。

于 2012-11-30T22:50:16.570 回答