Номер RegEx не окружен другими номерами - PullRequest
1 голос
/ 20 ноября 2010

Я пытаюсь получить шестизначное число, которое не окружено каким-либо другим номером и не находится в последовательности чисел. Этот номер может существовать в начале строки, в любом месте и в конце. Кроме того, перед ним могут быть запятые и текст, но самое главное - это отдельные блоки из 6 цифр. Я выдернул свои волосы, выполняя махинации и условия, и не могу найти полное решение, которое решает все проблемы.

Пример данных:

00019123211231731ORDER NO 761616 BR ADDRESS 123 A ST
ORDER NO. 760641 JOHN DOE
REF: ORDER #761625
OP212312165 ORDER NUMBER 759699 /REC/YR 123 A ST
766911
761223,761224,761225

Ответы [ 3 ]

4 голосов
/ 20 ноября 2010

(^|\D)(\d{6})(\D|$).Вы найдете нужное 6-значное совпадение в группе захвата 2. Обратите внимание, что это решение надежно только для одного совпадения.Он не найдет оба числа в 123456,567890 (Спасибо, Алан, за это!).Если необходимо несколько совпадений, следует использовать обходное решение.

С осмотрами:

(?<=^|\D)\d{6}(?=\D|$)

или с осмотрами и условием длябыть действительным числом (т. е. первая цифра не равна 0):

(?<=^|\D)[1-9]\d{5}(?=\D|$)

2 голосов
/ 04 января 2013

Вы можете использовать отрицательный взгляд позади и отрицательный взгляд вперед , чтобы убедиться, что рядом с соответствием нет цифр:

(?<!\d)\d{6}(?!\d)

Этот только соответствует номеру, а не соседним символам.
Кроме того, это работает, если совпадение находится в начале или конце строки.

0 голосов
/ 21 ноября 2010

Не могли бы вы так же легко использовать это регулярное выражение

[^0-9](\d{6})[^0-9]

Оно должно совпадать с любым 6-значным числом, не дополняемым другими числами.Поэтому не быть в последовательности.

...