如何使用正则表达式在字符串中查找重复的字母 - Python3

How to find a repeated letter in a string with Regular Expressions - Python3

我尝试了很多不同的方法,但我做不到。我需要用正则表达式捕获两个不同的字符串(我在 Py3 上使用 RE)。

  1. 我需要取一个相同字母重复3次的子串.
  2. 我需要一个 XYX 的子字符串,比如“BAB”或“ACA”(我什至不知道如何开始)

opções = "abc aab aaa acb acvd ccd bb bbb dsa dssd ssss" #the string 

regular = re.compile('([a-z])') #I need to find "aaa", "bbb" and etc., but not "sss" or "bb"

print(regular)
print(re.findall(regular, opções))```


问题

你有几个问题:

  1. 您的正则表达式 ([a-z]) 捕获单个小写字母字符,然后尝试匹配捕获组 3(不存在)
  2. 您使用 re.findall(regular, string) 但您已经将正则表达式编译为 regular,因此您应该将其称为 regular.findall(string)
  3. 您将正则表达式用单引号括起来(好)',但您的正则表达式包含反斜杠。要逃避它,您需要使用 r''

解决方案

解决以上所有问题,我们得到以下内容。

finditer方法

See code working here

import re

s = "abc aab aaa acb acvd ccd bb bbb dsa dssd ssss"
r = re.compile(r'\b([a-z])\b')

print([i[0] for i in r.finditer(s)])

正则表达式的工作原理是确保单词 \b 周围的单词边界,以便我们精确匹配 3 次重复,而不是更多(如您的问题所指定 - 匹配 bbb 但不匹配 sss ssss).

列表理解循环遍历 finditer 的结果,只为我们提供每个匹配项中的第一个元素(否则我们会得到每个元素 ('aaa', 'a') 看起来像这样的列表)。

findall方法

See code working here

import re

s = "abc aab aaa acb acvd ccd bb bbb dsa dssd ssss"
r = re.compile(r'\b(([a-z]))\b')

print([i[0] for i in r.findall(s)])