2016-04-16 4 views
-1

ich diese gefunden:Python mit der Gruppe wieder: zu extrahieren char in string wiederholen und was ist char

>>> re.findall(r'((.)\2*)',s) 
[('111', '1'), ('22', '2'), ('1', '1')] 
>>> s 
'111221' 
>>> 

ich nicht in der Lage bin \ 2 * zu folgen, wie funktioniert die Regex gearbeitet: erste Gruppe gibt ich die zweite Gruppe char Wiederholung in s. Es ist wunderbar!

\ 2 bedeutet die zweite Gruppe, aber was ist die zweite Gruppe hier ?!

Hinweis: Dies ist zu erhalten, wie oft ein Zeichen in einer Zeichenfolge wiederholt wird.

Antwort

2

\2 ist ein Rückreferenzierung zu dem, was in Capture-Gruppe 2.
Zum Beispiel erfasst wurde, wenn die Gruppe 2 b erfasst, kann \2+ nur b oder bb, etc ..
Entspricht bb+ entsprechen dem 'b' sein kann ein beliebiges Zeichen außer Newline.

(    # (1 start) 
     (.)    # (2), Any character 
     \2*    # Backreference to capture group 2, 0 to many times 
)     # (1 end) 
2

In Ihrem Beispiel Capture-Gruppe 1 \1 ist ((.)\2*) und die Capture-Gruppe 2 \2 ist (.)

Weil Sie nicht die erste Capture-Gruppe verwenden, könnten Sie stattdessen nicht-einfangende Gruppe verwenden: (?:(.)\1)