2014-01-16 45 views
0

我想提取從命令狀串一些基團與形式:正則表達式:匹配逗號後面沒有數

  1. 了foo(bar,1)。 >需要'foo','bar'和'1'
  2. foo(bar,1.1)。 >需要'foo','bar'和'1.1'
  3. foo(bar- {foo,bar},1.1)。 > need'foo','bar- {foo,bar}'and'1.1'

所以逗號可以出現在第一個參數中!

由於第二個參數總是以數字開頭,我可以匹配的第一個參數逗號未後跟一個數字,但我卻無法和前瞻:(

這裏是做我迄今爲止嘗試:

(\w+)\(([a-zA-Z0-9_\-\{\}~]+)(,(\d+(\.\d+)?))?\)\. 

...但例如3將不匹配這一個

(\w+)\(([a-zA-Z0-9_\-\{\}~\,(?!\d)]+)(,(\d+(\.\d+)?))?\)\. 

...這一個不會讓我趕上團> 2(負前瞻沒有按。不影響f IRST逗號)

這裏的Debuggex example

任何幫助將不勝感激!非常感謝提前:)

+0

什麼樣的符號否定逗號?只有一個'{''}'?你想用'foo(bar [1,2],3)'發生什麼? – Sam

+0

您正在使用什麼語言? – Bohemian

+0

@SamSullivan:只有{}否定逗號。其他情況不會發生。 – Zim

回答

2

如果{}應該包含anyting那麼也許這將工作?

(\w+)\(([a-zA-Z0-9_\-~]+(\{.*\})?),(.+)\)\. 
+0

假設{}可以包含任何東西,我會說是這種情況,這就像一個魅力,所以我接受這個答案:)謝謝Maciek – Zim

1

這似乎這樣的伎倆:

(.*?)(?:\(|\)|,(?=\d)) 

EXPL:匹配任何多達無論是 '(', ')' 或 '' 後面跟着一個數字。

如果你想隨心所欲的空間被允許:

\s*(.*?)\s*(?:\(|\)|,(?=\d))\s* 

使用全局標誌,以獲取所有實例。

Regards

+0

這確實工作,但我不知道我將能夠捕捉到不同的組(使用Java)!感謝您的回答ClasG :) – Zim

相關問題