2015-03-14 6 views
0

Следующее регулярное выражение повторяется та же картина в 16 раз:Python: как использовать повторно {N}

\d[\s|-]*\d[\s|-]*\d[\s|-]*\d[\s|-]*\d[\s|-]*\d[\s|-]*\d[\s|-]*\d[\s|-]*\d[\s|-]*\d[\s|-]*\d[\s|-]*\d[\s|-]*\d[\s|-]*\d[\s|-]*\d[\s|-]*\d[\s|-]* 

я пытался упростить ее с помощью:

[d[\s|-]*]{16} 

Но это не Работа. То, что было найдено в предыдущем выражении, не найдено вторым. Кстати, строго говоря, мне нужно использовать re {16,}, чтобы найти 16 или более цифр независимо от того, что они разделены пробелом или дефисом.

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

+0

Использование группы: '(\ d [\ s | -] *) {16}', используя не захватывающую группу: '(?: \ D [\ s | -] *) {16}' – falsetru

+0

Ваш второй предложение, но не первое, которое находит только одну цифру. Какая разница? – PrincessLilly

+0

Это зависит от того, какую функцию/метод вы используете. Пожалуйста, найдите группу захвата, не захватывающую группу. – falsetru

ответ

0

Вам нужно поместить оператор диапазона после построения группировки.

(?:\d[\s-]*){16} 

Объяснение:

(?:  # group, but do not capture (16 times): 
    \d  # digits (0-9) 
    [\s-]* # any character of: whitespace, '-' (0 or more times) 
){16}  # end of grouping 

Примечание:| внутри класса символов не является оператором Чередование, он совпадает с характером буквально.

+0

Да что работает. Использование «группировки конструкции вместо класса символов». В той же мысли, возможно, я не должен был использовать класс символов для обозначения «пространства или дефиса». Это было бы правильнее (?: \ D (?: \ S | -) *) {16}? – PrincessLilly

+1

Нет, класс символов был бы более эффективным – hwnd

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