正则表达式 - 如果模式匹配,则在双引号之间替换字符(逗号)

Joe*_*jam 3 java regex csv perl preg-replace

我有来自Exchange服务器的这个日志

2010-05-20T01:53:33.097Z,12.10.53.144,,12.10.53.200,EXHUB-10,08CCC3F50C35F2D2; 2010-05-20T01:53:32.128Z; 0,EXHUB-10 \默认EXHUB-10,SMTP, RECEIVE,829888 ,, norma @ ccc.gov.my ,, 521647,1 ,,,"NEAC分工作组会议 - 劳动力升级技能和加强职业技术培训 - 2010年5月24日星期一下午2:30 ",lee.cheesung @ gmail.com,<>,00A:

我使用这个正则表达式来匹配和分组模式;

?(\ d {4} - \d {2} - \d {2})(?:[\ W\S] +)(\ d +:\ d +:\ d +\d +)(:[\ W +\d.]*),(.*?),(.*?),(.*?),(.*?),(.*?),(.*?),(.*?),(. ????*),(*),(*),(*),([ '"].*['"] |.?.*),(*),(*)?? (?*),(?*),(.*?),(?*),(.*?),(?:(\ d {4} - \d {2} - \d { 2}\W\d {2}:\ d {2}:\ d {2}\d +)(:?\ W +)*)*(*)

基本上,日志中的信息由逗号分隔.不幸的是,对于"电子邮件主题"字段,如果用户输入逗号,日志将以双引号显示,例如上面的示例 - 日期格式的逗号"Monday May 24, 2010"

..... 521647,1 ,,,"NEAC分工作组会议 - 提升劳动力技能并加强职业技术培训 - 2010年5月24日星期一下午2:30",lee.keesung @ gmail.com ,.....

如何在没有特定组中的双引号的情况下将逗号与逗号一起抓取(第19组)

cod*_*ict 5

你提到:

基本上,日志中的信息用逗号分隔...如果逗号是字段的一部分,则字段将被双引号.

这使它成为一个CSV文件.解析CSV文件是一个已解决的问题,您无需重新发明轮子.使用语言库提供的CSV解析器.

如果您使用的是Perl,请查看Text :: CSV模块.

  • 借调 - 我一直使用`Text :: CSV`,或者更准确地说,`Text :: CSV_XS`是相同但更快的. (3认同)