我正在尝试匹配“任何不是相同字符的连续链。(句点)”
可以说我有
line = '....xooo......'
如果我这样做,
match in re.findall(r'[^\.]{2,}', line)
匹配返回“xooo”。
相反,我只想要“ooo”,它是一个相同字符的序列。
我该怎么做呢?
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']
line = '....xooo......aaaa...'
import re
print [whole for whole, _ in re.findall("(([^.])\\2+)", line)]
输出
['ooo', 'aaaa']
([^.])
匹配任何东西,但.
它被捕获为一个组。\\2
指的是内部捕获的组,它是匹配的字符([^.])
并且+
意味着至少一次。所以,它匹配ooo