我正在尝试匹配以下三行:
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|-)+)*) *$
我应该在这做什么? -
在正则表达式中不是特殊字符,是吗?
答案 0 :(得分:3)
-
只是角色类[...]
您的问题来自v -12.1892 -53.4267 -276.4055
,v
和-12.18...
之间包含2个空格。你的正则表达式只匹配一个。
请尝试使用此正则表达式:
^(\w+)\s*((\S+)( \S+)*) *$
虽然你的正则表达式可以简化为(不确定你想要匹配和捕获的确切内容):
^(\w+)(\s*\S+)*$
上查看
答案 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 +)+”但这可能不适合你 - 它似乎太通用了。让我知道你想要实现的目标,我会给你正则表达式,