Python 一些两个字母的序列重复了3次&引用;“知足”;及;维持;是这样的话吗
有多少单词包含重复3次的两个字母序列?例如,“满足”和“保持”是这样的词,因为“满足”的顺序“nt”重复三次,“保持”的顺序“in”重复三次 这是我的代码:Python 一些两个字母的序列重复了3次&引用;“知足”;及;维持;是这样的话吗,python,regex,python-3.x,regular-language,Python,Regex,Python 3.x,Regular Language,有多少单词包含重复3次的两个字母序列?例如,“满足”和“保持”是这样的词,因为“满足”的顺序“nt”重复三次,“保持”的顺序“in”重复三次 这是我的代码: len([f for f in file if re.match(r'(.*?[a-z]{2}.*?){3}',f)]) 你可以用 \b(?=\w*(\w{2})(?:\w*\1){2})\w+ 看 详细信息 \b-单词边界 (?=\w*(\w{2})(?:\w*\1{2})-紧接着是0+字字符,然后两个字字符被捕获到组1中,然后任
len([f for f in file if re.match(r'(.*?[a-z]{2}.*?){3}',f)])
你可以用
\b(?=\w*(\w{2})(?:\w*\1){2})\w+
看
详细信息
-单词边界\b
-紧接着是0+字字符,然后两个字字符被捕获到组1中,然后任何0+字字符必须有两次重复,后跟与组1中相同的值(?=\w*(\w{2})(?:\w*\1{2})
-使用一个或多个单词字符\w+
\b(?=\w*(\w{2})(?:\w*\1){2})\w+
看
详细信息
-单词边界\b
-紧接着是0+字字符,然后两个字字符被捕获到组1中,然后任何0+字字符必须有两次重复,后跟与组1中相同的值(?=\w*(\w{2})(?:\w*\1{2})
-使用一个或多个单词字符\w+
.*(\w{2}).*\1.*\1
它捕获具有(\w{2})
的组中的两个字母,然后具有相同字母的同一组必须在\1
中出现两次以上
下面是一个实际的例子:
import re
text = """
How many words contain some two-letter sequence repeated 3 times? For example, "contentment" and "maintaining" are such words because "contentment" has the sequence "nt" repeated three times and "maintaining" has the sequence "in" repeated three times.
"""
def check(word):
return re.match(r".*(\w{2}).*\1.*\1", word)
def main():
for word in text.split():
if check(word):
print(word)
main()
下面是一个简单的正则表达式:
.*(\w{2}).*\1.*\1
它捕获具有(\w{2})
的组中的两个字母,然后具有相同字母的同一组必须在\1
中出现两次以上
下面是一个实际的例子:
import re
text = """
How many words contain some two-letter sequence repeated 3 times? For example, "contentment" and "maintaining" are such words because "contentment" has the sequence "nt" repeated three times and "maintaining" has the sequence "in" repeated three times.
"""
def check(word):
return re.match(r".*(\w{2}).*\1.*\1", word)
def main():
for word in text.split():
if check(word):
print(word)
main()
你的代码有什么问题?@usr2564301当前的代码没有捕获2个匹配的
[a-z]{2}
,这是验证它是否再次出现所需的。关于如何将“三元组”称为一个字母,后跟另一个字母,后跟第一个字母,如“ama”或“ere”。例如,“合并”有两次出现的“ama”,而“撤销引用”有两次出现的“ere”。-请参见“代码< > w { 2 } /代码>使用<代码> \W{ 3 } /代码>并在分组后删除<代码> { 2 } /COD>,请参见接受对您工作最佳的答案(参见)。您的代码有什么错误?@ UR2525301,当前代码不捕获2个匹配的<代码> [AZ] { 2 }。需要验证它是否再次出现。关于如何将“三元组”称为一个字母后接另一个字母后接第一个字母的模式,如“ama”或“ere”。例如,“合并”有两次出现的“ama”,而“撤销引用”有两次出现的“ere”。-请看,只需替换<代码> \W{2 } /代码>用<代码> \W{ 3 } /代码>并在分组之后删除<代码> { 2 } /COD>,请参阅。请考虑接受对您最有效的答案(参见)。我有一个快速问题。顺便说一句,非常感谢你!!我怎么称呼“三元组”呢?一个字母后面跟着另一个字母,后面跟着第一个字母,比如“ama”或“ere”。例如,“mergage”有两次出现的“ama”,而“dereference”有两次出现的“ere”。@DylanYoung同样的基本原则,您捕获组中的第一个字母,然后用\1或\2引用该组。我有一个简短的问题。顺便说一句,非常感谢你!!我怎么称呼“三元组”呢?一个字母后面跟着另一个字母,后面跟着第一个字母,比如“ama”或“ere”。例如,“mergage”有两次出现的“ama”,而“dereference”有两次出现的“ere”。@DylanYoung同样的基本原则,您捕获组中的第一个字母,然后用\1或\2引用该组