Как включить знак минус в этом регулярном выражении? - PullRequest
1 голос
/ 26 сентября 2010

Я пытаюсь сопоставить следующие три строки:

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 ]

3 голосов
/ 26 сентября 2010

- - это только специальный символ в классах символов [...]

Ваша проблема связана с v -12.1892 -53.4267 -276.4055, содержащим 2 пробела между v и -12.18....Ваше регулярное выражение соответствует только одному.

Попробуйте вместо этого следующее регулярное выражение:

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

Хотя ваше регулярное выражение может быть упрощено до (хотя вы не знаете точно, что вы хотите сопоставить и захватить):

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

Посмотреть на http://rubular.com/r/D86njdYzJF

2 голосов
/ 26 сентября 2010

Поместите это сначала в класс: [-\S] тогда это должно работать.

1 голос
/ 26 сентября 2010

Между v и -12.1892 есть два пробела, которые, по-видимому, являются вашей проблемой. Также для использования - внутри класса символов, т. Е. [...], вам необходимо экранировать его с помощью \-

0 голосов
/ 26 сентября 2010

Розарх, вы не были настолько конкретны в формулировании своих требований - самым основным регулярным выражением, которое я мог придумать, чтобы соответствовать вашим образцам данных, было "(\ S + \ s +) +", но это не могло бы подойти вам это кажется слишком общим. Дайте мне знать, чего вы пытаетесь достичь, и я дам вам регулярное выражение,

0 голосов
/ 26 сентября 2010

Причина, по которой он не совпадает, заключается в том, что в вашей третьей строке есть ДВА пробела между v и -12.1892.Попробуйте это:

^(\w+) +(([\S]+)( [\S]+)*) *$ (добавленный знак + позволяет использовать несколько пробелов)

Вот jsfiddle для его проверки: http://jsfiddle.net/xewys/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...