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

时间:2010-12-06 03:53:47

标签: java regex perl csv 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,接收,829888,诺玛@ ccc.gov.my ,, 521647,1 ,,,“NEAC   工作分组会议 - 升级   劳动力和劳动力的技能   加强职业技术教育   培训 - 5月24日星期一下午2:30,   2010" ,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子工作   小组会议 - 升级技巧   劳动力与提升职业   和技术培训 - 周一下午2:30   5月24日,   2010" ,lee.keesung @ gmail.com,.....

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

3 个答案:

答案 0 :(得分:5)

你提到:

  

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

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

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

答案 1 :(得分:2)

您提供的行似乎是CSV格式。为什么不使用CSV解析器解析它,例如:

答案 2 :(得分:0)

对于java使用Apache commons:

http://commons.apache.org/sandbox/csv/