如何使用re查找连续的,重复的字符

发布于 2021-01-29 18:38:52

我想在字符串中找到所有连续的,重复的字符块。例如,考虑以下内容:

s = r'http://www.google.com/search=ooo-jjj'

我想找到这个:wwwooojjj

我试图这样做:

m = re.search(r'(\w)\1\1', s)

但这似乎不像我期望的那样。有任何想法吗?

另外,如何在Bash中做到这一点?

关注者
0
被浏览
48
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    ((\w)\2{2,}) 匹配3个或更多连续字符:

    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匹配组号2的内容。由于我嵌套了括号,因此组号2表示由匹配的字符\w

    然后将它们放在一起, ((\w)\2{2,})匹配任何字母数字字符,然后再重复 2次或更多次 重复相同的字符。

    总之,这意味着正则表达式要求字符重复3次或更多次。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看