正则表达式:如果之前没有空格,则与昏迷结束匹配

时间:2014-02-10 19:02:53

标签: java regex space comma

我有以下字符串匹配:

Attribute1=             ,Attribute2=opengdfd: ERROR: (fgdke.c, 84,
Init state check failed! (INVALID_SESSION, 3424))                     
,Attribute3=34624     ,Attribute4=iluvregex

我想要的是将Attribute1 / 2/3分成不同的值。

  • 如果没有后跟空格,则值的结尾必须是逗号

  • 消除匹配结尾空格,可以通过两个空格的组匹配空格。

谢谢!

3 个答案:

答案 0 :(得分:1)

也许这可以让你开始用你正在写的任何语言。这是perl代码(不确定Java版本是什么)。这一部分:,正则表达式中的(?!\ s)是negative lookahead,确保逗号后面没有空格。 (。+?)部分是捕获组,其中是属性的值:

say for $data =~ /Attribute\d+=(.+?),(?!\s)/gs;

答案 1 :(得分:0)

您可以在,(?=\s*Attribute\d+=)上拆分,以获得不同属性的数组。

答案 2 :(得分:0)

String input = "Attribute1=             ,Attribute2=opengdfd: ERROR: (fgdke.c, 84,"+
               "Init state check failed! (INVALID_SESSION, 3424))                 "+
               ",Attribute3=34624     ,   Attribute4=iluvregex";
Matcher m = Pattern.compile("Attribute\\d+\\=(.*?)((?=,(\\s*)Attribute\\d+\\=)|$)", Pattern.DOTALL).matcher(input);
while(m.find())
    System.out.println(">"+m.group(1).trim()+"<");

打印:

><
>opengdfd: ERROR: (fgdke.c, 84,Init state check failed! (INVALID_SESSION, 3424))<
>34624<
>iluvregex<

如果您只想修改结果,请将trim()替换为.replaceAll("\\s*$","");