2014-02-10 57 views
-1

我有以下字符串匹配:正則表達式:結束匹配昏迷,如果沒有空間之前

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

我想是ATTRIBUTE1/2/3分隔成不同的值。

  • 的價值最終必須是一個逗號僅在未後跟空格

  • 從匹配結束空間,也許可以通過在兩個空間的組相匹配的空間消除。

謝謝!

回答

1

也許這可以讓你開始用你正在寫的任何語言。這是Perl代碼(不確定Java版本是什麼)。這部分:,(?!\ s)在正則表達式中是一個negative lookahead,確保逗號後沒有空格。 (?+)的部分是捕獲組,裏面這是屬性的值:

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

你可以只劈在,(?=\s*Attribute\d+=)有你的不同屬性的一個很好的陣列。

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< 

如果你只是想右修整的結果,通過.replaceAll("\\s*$","")更換trim();

相關問題