Как обнаружить точную длину в regex

Вы можете попробовать и с Perl.

perl -lne ' $x++ for(/Numero de expediente/g); if($x>=2) { print $ARGV;close(ARGV);$x=0 } ' *.txt

. $ X будет 0, и для каждого совпадения с образцом (Numero de expediente) он будет увеличиваться, даже если шаблон появляется дважды в одном и том же линия. Когда у вас есть как минимум 2 совпадения, дескриптор файла закрывается с помощью close (ARGV) и читается следующий файл.

9
задан Gumbo 25 April 2009 в 08:31
поделиться

7 ответов

Я думаю, что вы пытаетесь сказать, что вы не хотите допускать более 10 цифр. Итак, просто добавьте $ в конце, чтобы указать конец регулярного выражения.

Пример: @ "^ \ s * (? [0-9] {10}) $"


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

string myRegexString = `@"(?!(^\d{11}$)` ... your regex here ... )";

Это гласит «пока впереди нет, начало, 11 цифр, конец»

16
ответ дан 4 December 2019 в 09:14
поделиться

Если это одна строка, вы можете указать, что ваше совпадение должно происходить в конце строки, например, в .net ...

^\s*([0-9]{10})\z

Это будет принимать 1234567890, но отклонять 12345678901.

4
ответ дан 4 December 2019 в 09:14
поделиться

Вы имеете в виду, что хотите сопоставить до 10 цифр? Попробуйте это:

@"^\s*[0-9]{1,10}\s*$"
2
ответ дан 4 December 2019 в 09:14
поделиться

Если вы пытаетесь сопоставить только числа длиной 10 цифр, просто добавьте завершающий привязка с использованием $, например:

^\s*(?:[0-9]{10})\s*$

Это будет соответствовать любому числу, длина которого ровно 10 цифр (с необязательным пробелом с обеих сторон).

1
ответ дан 4 December 2019 в 09:14
поделиться

Соответствует чему-то нечисловому после строки длиной 10. Мой regex-foo не так хорош, но я думаю, что вы настроили его так, чтобы он перехватывал числовую строку точно длиной 10, но поскольку после этого вы ничего не соответствуете, строка длины 11 также будет соответствовать. Попробуйте найти соответствие за концом числа, и все будет хорошо.

0
ответ дан 4 December 2019 в 09:14
поделиться

Вы можете попробовать чередование?

^\s*(?\d{1,10}|\d{12,})
0
ответ дан 4 December 2019 в 09:14
поделиться

Это должно соответствовать только 10 цифрам и разрешать произвольные числа пробелов до и после цифр.

Версия без захвата: (только совпадения, совпадающие цифры не сохраняются)

^\s*(?:\d{10})\s*$

Захватывающая версия: (соответствующие цифры доступны в подгруппе 1 как $ 1 или \ 1)

^\s*(\d{10})\s*$
0
ответ дан 4 December 2019 в 09:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: