查找最短子字符串

2024-09-30 01:29:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一段代码来从字符串中找到子字符串。它打印所有子字符串。 但是我想要一个长度从2到6的子字符串,并打印最小长度的子字符串。 请帮帮我

课程:

import re
p=re.compile('S(.+?)N')
s='ASDFANSAAAAAFGNDASMPRKYN'
s1=p.findall(s)
print s1

输出:

^{pr2}$

期望输出:

'DFA'  length=3

Tags: 字符串代码importrelength课程printcompile
2条回答

regex 'S(.{2,6}?)N'将只提供长度为2-6个字符的匹配项。在

{return To the shortest}使用匹配的子环。在

完整示例:

import re
p=re.compile('S(.{2,6}?)N')
s='ASDFANSAAAAAFGNDASMPRKYNSAAN'
s1=p.findall(s)
if s1:
    print sorted(s1, key=len)[0]
    print min(s1, key=len) # as suggested by Nick Presta

这是通过按长度对findall返回的列表进行排序,然后返回排序后的列表中的第一项。在

编辑:尼克·普雷斯塔的回答更为优雅,我不知道min也可以采用key的论点。。。在

如果已经有了列表,可以使用min函数和len函数作为第二个参数。在

>>> s1 = ['DFA', 'AAAAAFG', 'MPRKY']
>>> min(s1, key=len)
'DFA'

编辑:
如果两个元素的长度相同,则可以进一步扩展此值以生成一个包含长度相同的元素的列表:

^{pr2}$

当只有1个“最短”元素时,上述方法也应该起作用。在

编辑2:为了完成,至少根据我的简单测试,计算最短元素的长度并将其用于列表理解应该更快。以上更新。在

相关问题 更多 >

    热门问题