Подтвердить что ты не робот

Повторение нескольких символов regex

Есть ли способ использовать регулярное выражение для соответствия повторяющемуся набору символов? Например:

ABCABCABCABCABC

ABC{5}

Я знаю это неправильно. Но есть ли что-нибудь, что могло бы соответствовать этому эффекту?

Update:

Можете ли вы использовать вложенные группы захвата? Так что-то вроде (?<cap>(ABC){5})?

4b9b3361

Ответ 1

Закрепите регулярное выражение, которое вы хотите повторить в круглых скобках. Например, если вы хотите 5 повторений ABC:

(ABC){5}

Или, если вы хотите любое количество повторений (0 или больше):

(ABC)*

Или одно или несколько повторений:

(ABC)+

изменить, чтобы отвечать на обновления

Скобки в регулярных выражениях делают две вещи; они группируют последовательность элементов в регулярном выражении, так что вы можете применить оператор к целой последовательности, а не только к последнему элементу, и они захватывают содержимое этой группы, чтобы вы могли извлечь подстроку, которая была сопоставлена ​​этим подвыражением в регулярном выражении.

Вы можете заключать круглые скобки; они подсчитываются с первого вскрытия. Например:

>>> re.search('[0-9]* (ABC(...))', '123 ABCDEF 456').group(0)
'123 ABCDEF'
>>> re.search('[0-9]* (ABC(...))', '123 ABCDEF 456').group(1)
'ABCDEF'
>>> re.search('[0-9]* (ABC(...))', '123 ABCDEF 456').group(2)
'DEF'

Если вы хотите избежать захвата при группировке, вы можете использовать (?:. Это может быть полезно, если вы не хотите, чтобы скобки, которые вы просто используете, группировали последовательность с целью применения оператора для изменения нумерации ваших совпадений. Это также быстрее.

>>> re.search('[0-9]* (?:ABC(...))', '123 ABCDEF 456').group(1)
'DEF'

Итак, чтобы ответить на ваше обновление, да, вы можете использовать вложенные группы захвата или даже избегать захвата внутренней группой:

>>> re.search('((?:ABC){5})(DEF)', 'ABCABCABCABCABCDEF').group(1)
'ABCABCABCABCABC'
>>> re.search('((?:ABC){5})(DEF)', 'ABCABCABCABCABCDEF').group(2)
'DEF'

Ответ 2

(ABC){5} Должен работать для вас

Ответ 3

ABC {5} соответствует ABCCCCC. Чтобы соответствовать 5 ABC, вы должны использовать (ABC) {5}. Круглые скобки используются для группировки набора символов. Вы также можете установить интервал для таких случаев, как (ABC) {3,5}, который соответствует ABCABCABC, ABCABCABCABC и ABCABCABCABCABC.

(ABC) {1,} означает 1 или более повторение, которое точно совпадает с (ABC) +.

(ABC) {0,} означает 0 или более повторение, которое точно совпадает с (ABC) *.

Ответ 4

Круглые скобки "()" используются для группировки символов и выражений в более сложных, более сложных регулярных выражениях. Квантеры, которые сразу же следуют за группой, относятся ко всей группе.

(ABC){5}

Ответ 5

Что касается обновления вопроса -

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

(((ABC)*)(DEF)*)

Подача этого регулярного выражения ABCABCABCDEFDEFDEF, группа захвата 0 соответствует всему, 1 также является целым, 2 - ABCABCABC, 3 - ABC, а 4 - DEF (потому что звезда находится вне группы захвата).

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

(a[bc]*c)*

при подаче abbbcccabbc вернет последнее совпадение в качестве группы захвата 1, в этом примере просто аббит, так как группа захвата получает reset с оператором повтора.