正则表达式在Java中捕获,就像在C中一样#
我需要使用Java重写现有C#/.NET程序的一部分。我对Java不是很精通,我缺少一些处理正则表达式的东西,我只是想知道我是否缺少一些东西,或者Java是否不提供这样的功能 我有这样的数据正则表达式在Java中捕获,就像在C中一样#,java,c#,regex,capture,regex-group,Java,C#,Regex,Capture,Regex Group,我需要使用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 我使用的正则表达式模式如下所示: ?(\d{4}:\d{2}:\d{2} \d{2}:\d{2}[:\d{2}]?)\t((-?\d*(\.\d
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中,我可以使用match.Group[3]访问匹配后的值。捕获[I]
在Java中,我没有发现类似的东西matcher.group(3)
只返回一个空字符串
如何实现我在C#中习惯的行为?正如我在评论中提到的,Java只返回多值组拟合的最后一个值。因此,您应该首先使用正则表达式将字符串的最后一部分与以下值隔离:
strg=“0.478\t0.209\t0.211\t0.211\t0.205\t-0.462\t0.203\t0.202\t0.212”
然后只需在选项卡周围拆分:
String[]value=strg.split(\\t”)代码>应相同。编译你的模式,匹配,就这样。java正则表达式只是普通正则表达式。我很想说“检查您的输入”等等。问题是,当进行多值组拟合时,(某物)*
或(某物){1,16}
,Java只返回拟合中最后拟合的项目。所以我猜在你的情况下,第一组是2011:06:05 15:50
,第二组是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
。但是我必须再次拆分结果字符串。这不是我认为正确的方法…看看我的答案。我认为这是唯一的出路。但我希望被证明是错的,并看到有人想出一个更优雅的答案。是的,这是我目前暂时的解决办法。也在等待更好的解决方案……;)@signpainter:.NET和Perl 6是目前唯一支持重复组捕获的正则表达式实现。因此,如果您使用的是Java,那么除了这个解决方案之外没有其他选择。