正则表达式:如何匹配相同的字符序列?

时间:2013-11-13 01:33:01

标签: python regex

我正在尝试匹配“不是。(句号)的任何连续的同一个字符链”

让我说我有

line = '....xooo......'

如果我这样做,

match in re.findall(r'[^\.]{2,}', line)

匹配返回“xooo”。

相反,我只想要“ooo”,这是一个相同的字符序列..

我该怎么做?

2 个答案:

答案 0 :(得分:2)

re.search(r'(([^.])\2{1,})', line).group(1)

说明:

"(([^.])\2{1,})"
    1st Capturing group (([^.])\2{1,})
    2nd Capturing group ([^.])
      Negated char class [^.] matches any character except:
         . The character .
    \2 1 to infinite times [greedy] Matches text saved in the 2nd capturing group

如果您想要该约束的所有匹配项:

>>> line = '....xooo...xx..yyyyy.'
>>> map(lambda t: t[0], re.findall(r"(([^.])\2+)", line))
# ['ooo', 'xx', 'yyyyy']

答案 1 :(得分:1)

line = '....xooo......aaaa...'
import re
print [whole for whole, _ in re.findall("(([^.])\\2+)", line)]

<强>输出

['ooo', 'aaaa']

([^.])匹配.以外的任何内容,并将其作为一个组进行捕获。 \\2指的是内部捕获的组,即([^.])匹配的字符,+表示至少一次。因此,它匹配ooo