2016-03-14 1 views
4

У меня возникли проблемы с захватом определенной строки внутри предложения.Регулярное выражение для ввода точного слова в предложении

Regex, который я использую, - \b[0-9]{9,12}\b для записи чисел от 9 до 12 цифр. Границу я использовал, чтобы указать точное число, но проблема в том, что когда у меня есть число, которое соответствует этому регулярному выражению, за которым следует точка, например, регулярное выражение все еще совпадает и дает мне много проблем.

Как я искал, проблема в том, что \b использует некоторые специальные символы в качестве разделителя, верно? Тогда есть ли способ рассмотреть, например 123456789. целая строка и регулярное выражение не совпадают с этим примером?

Спасибо!

+0

Вы можете использовать '\ б (?

+0

Я просто удалил знак «<», и это сработало! Вероятно, ошибка ввода? И спасибо большое! – ruynunes

+0

Зачем заменять '(?

ответ

2

Слово граница \b требует символа без слова до и после цифры (в качестве цифры слово символ). Поскольку точки и запятые не являются символами слов, они разрешены. Чтобы убедиться, что последовательность цифр между точками не сопоставлена, вам необходимо использовать lookarounds.

Вы можете использовать

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

Посмотреть regex demo

Дополнительные подмасками являются (?<!\.) и просмотром назад опережения (?!\.) что убедитесь, что нет ни одного . до и после последовательности цифр.

Если у вас есть . и , как десятичные разделители, вы можете настроить шаблон для

\b(?<![.,])[0-9]{9,12}(?![.,])\b 
+1

Большое спасибо за объяснение Wiktor! Оно работает ! – ruynunes

Смежные вопросы