如何用re查找连续重复字符
我想在一个字符串中找到所有连续重复的字符块。比如,看看下面这个例子:
s = r'http://www.google.com/search=ooo-jjj'
我想找到这些:www
、ooo
和 jjj
。
我试着这样做:
m = re.search(r'(\w)\1\1', s)
但是结果似乎没有达到我的预期。有没有什么好的建议?
另外,我该如何在Bash中实现这个呢?
3 个回答
0
这个代码几乎是对的,只需要把 search
换成 finditer
。这样做会返回一个迭代器,而不是一个匹配结果,但是…:
m = [(x.start(),x.end()) for x in re.finditer(r'(\w)\1\1', s)]
3
下面的代码应该能解决你的问题:
s="abc def aaa bbb ccc def hhh"
for match in re.finditer(r"(\w)\1\1", s):
print s[match.start():match.end()]
26
((\w)\2{2,})
用来匹配三个或更多连续的字符:
In [71]: import re
In [72]: s = r'http://www.google.com/search=ooo-jjjj'
In [73]: re.findall(r'((\w)\2{2,})', s)
Out[73]: [('www', 'w'), ('ooo', 'o'), ('jjjj', 'j')]
In [78]: [match[0] for match in re.findall(r'((\w)\2{2,})', s)]
Out[78]: ['www', 'ooo', 'jjjj']
(\w)
可以匹配任何字母或数字字符。
((\w)\2)
匹配一个字母或数字字符后面跟着同样的字符,因为 \2
代表的是第二组匹配到的内容。由于我把括号嵌套了,所以第二组就是 \w
匹配到的字符。
把这些放在一起,((\w)\2{2,})
就是匹配一个字母或数字字符,后面跟着同样的字符再重复两次或更多次。
总的来说,这个正则表达式要求这个字符至少要重复三次。