Только числа в регулярном выражении, отрицательные числа также - PullRequest
1 голос
/ 17 октября 2011

Мне пришлось разбить строку на его числа.

Например, строка выглядит так:

VAR_1123 Var_G -12.34 VAR-14.34 12.4 12 -234

Результат, который я хотел бы:

-12.34,
12.4
12
-234

Я пробую это регулярное выражение:

([\-]?[0-9]+[\.[0-9]+]?)

Но результат также включает 1123 и -14,34.

Как можно исключить все числа, которые имеют подчеркивание или символьный бивор?

Для тестирования я использую эту ссылку:

http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

Ответы [ 5 ]

2 голосов
/ 17 октября 2011

Вот вы: -)

(?<=\A|\s)-?[\d.]+\b
1 голос
/ 16 марта 2013
\s\-*\d\S*\d

Префикс пробела, возможный минус, цифра ограничена возможными символами между границами.Работает, но, очевидно, может быть улучшено, чтобы охватить больше случаев.

0 голосов
/ 17 октября 2011

Единственный дополнительный критерий, который вам нужен, это то, что числа должны иметь пробел перед ними, поэтому это должно работать -

\s[\-]?[0-9]+[\.[0-9]+]?

Я только что добавил \s перед вашим регулярным выражением.Это работает, как вы хотите на примерах, которые вы привели.

0 голосов
/ 17 октября 2011

Используйте этот шаблон вместо

([$\s][\-]?[0-9]+[\.[0-9]+]?)

РЕДАКТИРОВАТЬ - Измените parantheses, чтобы \ s не был пойман.

[$\s]([\-]?[0-9]+[\.[0-9]+]?)
0 голосов
/ 17 октября 2011
  • Используйте скобки вместо класса символов, чтобы сгруппировать точку и последние цифры.
  • Используйте ?:, чтобы обозначить совпадение без захвата.
  • Изменить [\-]просто -.
  • Используйте заглядывания или оглядки для проверки окружающих пробелов.

Итак, последнее регулярное выражение выглядит так:

(?<=\s|^)-?[0-9]+(?:\.[0-9]+)?(?=\s|$)

См.это работает онлайн: ideone

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