从来自HTTP post的String中提取逗号分隔值

时间:2014-09-28 14:09:33

标签: java regex csv

我想从HTML post请求中提取逗号分隔值。

示例:

****"file"; filename="TEST.csv"
Content-Type: application/vnd.ms-excel
RECEIVERID,RECEIVERSITE,SENDERID,EMAIL_TO
1000003884,PEPSICO LTD.,1005,ZZZ@company.com
1000003884,PEPSICO LTD.,1010,ABC@company.com
------WebKitFormBoundary5ADzaHQgUvmKoZPI
Content-Disposition: form-data; name="submit"
Submit
------WebKitFormBoundary5ADzaHQgUvmKoZPI--****

我想使用正则表达式仅提取从 RECEIVERID,RECEIVERSITE ....到ABC @ company.com 的数据。

你能帮助我吗?

提前致谢!! Tanveer

3 个答案:

答案 0 :(得分:1)

使用String.split(delimiter)将返回一个数组,其中包含由指定分隔符分隔的所有String

有关更多信息,请参阅the doc about String

请注意,第一个和最后一个拆分的字符串将包含您不想要的文本,因此您可能希望在使用拆分方法之前删除未格式化为VALUE,VALUE,VALUE的部分。


如果你真的想使用正则表达式,你可以这样做(在删除额外数据后再次):

String regex = "[\\n|^|,]*(.*?)[,|$|\\n]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("RECEIVERID,RECEIVERSITE,SENDERID,EMAIL_TO\n" +
                                  "1000003884,PEPSICO LTD.,1005,ZZZ@company.com\n" +
                                  "1000003884,PEPSICO LTD.,1010,ABC@company.com");

while (matcher.find())
    System.out.println(matcher.group(1));

答案 1 :(得分:0)

^[^,]*?(?=\b\w+,)|(.*,[^\n]*)

试试这个。抓住捕获。不要忘记添加标记gs

参见演示。

http://regex101.com/r/lS5tT3/84

答案 2 :(得分:0)

如果您在正则表达式中使用锚点^$,则需要启用(?m) Multiline modifier

String text = "****\"file\"; filename=\"TEST.csv\"\n" + 
        "Content-Type: application/vnd.ms-excel\n" + 
        "RECEIVERID,RECEIVERSITE,SENDERID,EMAIL_TO\n" + 
        "1000003884,PEPSICO LTD.,1005,ZZZ@company.com\n" + 
        "1000003884,PEPSICO LTD.,1010,ABC@company.com\n" + 
        "------WebKitFormBoundary5ADzaHQgUvmKoZPI\n" + 
        "Content-Disposition: form-data; name=\"submit\"\n" + 
        "Submit\n" + 
        "------WebKitFormBoundary5ADzaHQgUvmKoZPI--****";
final Pattern p = Pattern.compile("(?m)^[^,\\n]*(?:,[^,]*?)+?$");
final Matcher m = p.matcher(text);
while(m.find()){           
    System.out.println(m.group(0));
}

<强>输出:

RECEIVERID,RECEIVERSITE,SENDERID,EMAIL_TO
1000003884,PEPSICO LTD.,1005,ZZZ@company.com
1000003884,PEPSICO LTD.,1010,ABC@company.com

DEMO