如何使用正则表达式在字符串中查找重复的字母 - Python3
How to find a repeated letter in a string with Regular Expressions - Python3
我尝试了很多不同的方法,但我做不到。我需要用正则表达式捕获两个不同的字符串(我在 Py3 上使用 RE)。
- 我需要取一个相同字母重复3次的子串.
- 我需要一个 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))```
问题
你有几个问题:
- 您的正则表达式
([a-z])
捕获单个小写字母字符,然后尝试匹配捕获组 3(不存在)
- 您使用
re.findall(regular, string)
但您已经将正则表达式编译为 regular
,因此您应该将其称为 regular.findall(string)
- 您将正则表达式用单引号括起来(好)
'
,但您的正则表达式包含反斜杠。要逃避它,您需要使用 r''
解决方案
解决以上所有问题,我们得到以下内容。
finditer
方法
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
方法
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)])
我尝试了很多不同的方法,但我做不到。我需要用正则表达式捕获两个不同的字符串(我在 Py3 上使用 RE)。
- 我需要取一个相同字母重复3次的子串.
- 我需要一个 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))```
问题
你有几个问题:
- 您的正则表达式
([a-z])
捕获单个小写字母字符,然后尝试匹配捕获组 3(不存在) - 您使用
re.findall(regular, string)
但您已经将正则表达式编译为regular
,因此您应该将其称为regular.findall(string)
- 您将正则表达式用单引号括起来(好)
'
,但您的正则表达式包含反斜杠。要逃避它,您需要使用r''
解决方案
解决以上所有问题,我们得到以下内容。
finditer
方法
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
方法
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)])