2011-06-05 35 views
5

我有一個使用Java重寫現有的C#/。NET程序的一部分。我不是很流利的Java,並且缺少處理正則表達式的東西,只是想知道我是否錯過了某些東西,或者如果Java沒有提供這樣的功能。正則表達式捕獲在Java中像C#

我有一個像

2011:06:05 15:50\t0.478\t0.209\t0.211\t0.211\t0.205\t-0.462\t0.203\t0.202\t0.212 

正則表達式模式數據我使用看起來像:

?(\d{4}:\d{2}:\d{2} \d{2}:\d{2}[:\d{2}]?)\t((-?\d*(\.\d*)?)\t?){1,16} 

在.NET中,我可以使用​​匹配後訪問值。

在Java中我還沒有找到類似的東西。 matcher.group(3)只是返回一個空字符串。

我該如何實現像我習慣於從C#那樣的行爲?

+0

值後什麼? – 2011-06-05 14:18:00

+0

應該是一樣的。編譯你的模式,匹配,就是這樣。 Java的正則表達式只是正常的正則表達式。我試圖說「檢查你的輸入」等 – Bohemian 2011-06-05 14:18:14

+0

問題是,當做一個多值組適合,'(something)*'或'(something){1,16}',Java只返回最後裝配項目在適合。所以我想你的情況是,第一組是'2011:06:05 15:50',第二組是'0.212',就是這樣。 – toto2 2011-06-05 14:23:26

回答

3

正如我在評論中提到的那樣,Java只會返回多值組fit的最後一個值。所以,你應該先使用正則表達式的字符串的最後部分和值隔離:

strg = "0.478\t0.209\t0.211\t0.211\t0.205\t-0.462\t0.203\t0.202\t0.212"

,然後就在標籤分裂:

String[] values = strg.split("\\t");

+1

是的,那是我迄今爲止的臨時解決方案。還在等待更好的解決方案...;) – signpainter 2011-06-05 14:34:26

+0

@signpainter:.NET和Perl 6是目前支持重複組捕獲的唯一正則表達式實現。因此,如果您使用的是Java,那麼沒有其他解決方案。 – 2011-06-05 14:59:14