2013-06-27 3 views
0

Цель здесь - найти все числовые значения длины от 5 до 8. десятичные и запятая между ними. это выражение я же, как сделал:Числовое значение регулярного выражения

\b[0-9](,?\.?\d){4,7}\b(?!,\d) 

он работает нормально, за исключением его соответствия 10,000,02332 для 000,02332. Я попробовал оба lookbehind и^но, похоже, я делаю ошибку.

здесь образец текста

  1. Nunc 12vitae lac332us sollicitudin 2033112233, Varius 100212 Ipsum а, gravida 10,000,02332 анте. Nunc et 100,021 justo eget arcu fringilla fermentum id venenatis lacus. Pellentesque a 23133221 tellus vel diam dignissim scelerisque123 nec ac2 12311 ipsum. Fusce at 12311.1 dui ut odio posuere 1233312234666 condimentum. Nulla 4564quis viverra 568833452233 nunc. Morbi 234322123 imperdiet, nulla adipiscing interdum venenatis, dui mi 2341112333 congue erat, sed 34234112323 suscipit est 345221 turpis in lorem. Proin magna123 nunc, 1231116565 rhoncus sit amet elit a, fermentum 5467667834533 semper felis. Integer non elit placerat metus fermentum auctor. Donec viverra enim в augue adipiscing, eget facilisis 3422211 ligula 12313645 вульгатный. Maecenas tincidunt 2346776444 posuere pretium. Donec euismod cursus velit. , 11111

вы можете проверить его здесь: http://gskinner.com/RegExr/

+0

Вы соответствие на '000,02332', потому что \ соответствует б символы не слова, которые включают в' 'и' .'. http://www.regular-expressions.info/wordboundaries.html – mjk

ответ

2

Попробуйте добавить (?<!\d[,.]) к передней части регулярного выражения и изменения (?!,\d) в (?![,.]\d).

Давать вам:

(?<!\d[,.])\b[0-9](,?\.?\d){4,7}\b(?![,.]\d) 

(?<!\d[,.]) является отрицательный взгляд-за проверки цифры, после запятой или полной остановки.

Я изменил негативный внешний вид, чтобы проверить полную остановку, так как иначе первая часть 12345678.3 будет соответствовать.

Test.

+0

Это похоже на хорошее решение с учетом ввода, но это соответствует: '10,0212'. Может быть, это не так? Если это будет принято, я обязательно буду +1. –

+0

@ DanielGimenez И '1.1.1.1.1.1' также будет согласован. В требованиях просто указывается, что разрешены запятые и полные стопы, а не только одна полна или запятая должны разделять только группы из 3 цифр. – Dukeling

+0

Это правильное решение для того, что я дал изначально. мое первоначальное выражение не лишено недостатков, как это пройдет 11.11.11, что неверно. любой может его улучшить. спасибо Dukeling – ali

1

Возможно, это вам подходит? Это не похоже на то, что сложно.

\ б \ д [\ д,.] {3,7} \ d \ б

+0

Как и в других решениях, кажется, что работает с данными, но если '10,0212' - это возможность появления в тексте, это плохое совпадение. –

+0

Это не решает проблему '10 000,02332'. – Dukeling

+0

Неправильно. он соответствует 10 000 02332 как 2 отдельных значения.подтвердите себя по ссылке, указанной в вопросе. Спасибо за ответ – ali