【发布时间】:2011-09-08 18:19:12
【问题描述】:
我需要使用 Java 重写现有 C#/.NET 程序的一部分。我对 Java 不是很流利,并且缺少一些处理正则表达式的东西,只是想知道我是否缺少某些东西,或者 Java 是否只是不提供这样的功能。
我有类似的数据
2011:06:05 15:50\t0.478\t0.209\t0.211\t0.211\t0.205\t-0.462\t0.203\t0.202\t0.212
我使用的 Regex 模式如下所示:
?(\d{4}:\d{2}:\d{2} \d{2}:\d{2}[:\d{2}]?)\t((-?\d*(\.\d*)?)\t?){1,16}
在 .NET 中,我可以使用 match.Group[3].Captures[i] 访问匹配后的值。
在 Java 中我还没有找到类似的东西。 matcher.group(3) 只返回一个空字符串。
我怎样才能实现像我在 C# 中习惯的那种行为?
【问题讨论】:
-
应该是一样的。编译你的模式,匹配,就是这样。 java 正则表达式只是普通的正则表达式。我很想说“检查您的输入”等。
-
问题是在进行多值组拟合时,
(something)*或(something){1,16},Java 只返回拟合中的最后一个拟合项。所以我想在你的情况下,第 1 组是2011:06:05 15:50,第 2 组是0.212,就是这样。 -
@toto:没错,这就是问题所在。此外,我可以在多值组周围加上一些括号,例如
((something){1,16})。然后我得到整个字符串(something){1,16}匹配,即0.478\t0.209\t0.211\t0.211\t0.205\t-0.462\t0.203\t0.202\t0.212。但随后我必须再次拆分生成的字符串。这不是我认为正确的方法...... -
看我的回答。这是我认为唯一的出路。但我希望被证明是错误的,并希望看到有人提出更优雅的答案。
标签: java c# regex capture regex-group