如何在此正则表达式中包含减号?

时间:2010-09-26 00:58:46

标签: java regex

我正在尝试匹配以下三行:

usemtl ftw
kd 1.2 3.2 3.1
v  -12.1892 -53.4267 -276.4055

我的正则表达式匹配前两个:

^(\w+) ((\S+)( \S+)*) *$

我尝试了一些变体来匹配负数,但它们只是阻止任何匹配:

^(\w+) (([\S-]+)( [\S-]+)*) *$
^(\w+) (((\S|-)+)( (\S|-)+)*) *$

我应该在这做什么? -在正则表达式中不是特殊字符,是吗?

5 个答案:

答案 0 :(得分:3)

-只是角色类[...]

中的特殊字符

您的问题来自v -12.1892 -53.4267 -276.4055v-12.18...之间包含2个空格。你的正则表达式只匹配一个。

请尝试使用此正则表达式:

^(\w+)\s*((\S+)( \S+)*) *$

虽然你的正则表达式可以简化为(不确定你想要匹配和捕获的确切内容):

^(\w+)(\s*\S+)*$

http://rubular.com/r/D86njdYzJF

上查看

答案 1 :(得分:2)

首先把它放在课堂上:[-\S]然后就可以了。

答案 2 :(得分:1)

v和-12.1892之间有两个空格似乎是你的问题。还要在字符类-中使用[...],您需要使用\-

来转义它

答案 3 :(得分:0)

它不匹配的原因是因为您的第三行在v-12.1892之间有两个空格。试试这个:

^(\w+) +(([\S]+)( [\S]+)*) *$(添加的+符号允许多个空格)

以下是测试它的jsfiddle:http://jsfiddle.net/xewys/

答案 4 :(得分:0)

Rosarch,你没有说明你的要求 - 我能想到的最基本的正则表达式匹配你的样本数据是“(\ S + \ s +)+”但这可能不适合你 - 它似乎太通用了。让我知道你想要实现的目标,我会给你正则表达式,