2012-03-01 107 views
0

我有以下字符串Java的模式重複捕獲組

52x10x20x30x40 

字符串可以延長,但具有相同的圖案,並有將在它的兩邊其他字符串:例如

"Hello something 52x10x20x30x40 bla bla bla" 

我想捕獲所有的2位數字。

我有以下的正則表達式

Pattern.compile("(\\d\\d)([x]\\d\\d)+"); 

但隨着這個表達式我只得到了以下組:

1: 52 
2: x40 

回答

4

爲什麼不乾脆:

"52x10x20x30x40".split("x"); 

忘了提及雙方都可能有其他字符串。

您可以搜索"\\d{2}(x\\d{2})+",並在比賽中使用split("x")

+0

忘了提,但不能對雙方 – Jonas 2012-03-01 17:01:59

+0

@Jonas其他字符串:你可以搜索'「\\ d {2}(X \\ d {2}) +「',並在匹配上使用'split()'。 – NPE 2012-03-01 17:03:49

0

正則表達式不支持變量組長度。

改爲使用拆分方法,例如, GuavaSplitter

Iterable<String> tokens = Splitter.on('x').split(str); 
+0

忘了提及雙方都可以有其他字符串 – Jonas 2012-03-01 17:02:07

+0

@Jonas,那麼你必須首先擺脫那些。也許你會先搜索模式'(\\ d \\ d)(([x] \\ d \\ d)+)',然後分割'matcher.group()' – 2012-03-01 17:05:15

0

如果你只是想捕獲所有兩位數的號碼,你可以使用這個表達式:

(?<!\d)(\d\d)(?!\d) 

通常你只能得到一個重複捕獲組匹配的最後一個子。 (.NET正則表達式的不同在這方面。)