有个字符串$sd1#111$svda123!!!221&eSSDSDG,包含特殊字符、数字和字母,输出最长的子字符串和他的长度 
例如上面的字符串同时包含数字和字母的字符串是svda123,长度是7
代码实现如下:

方法1:
str_scr = '$sd1#111$svda123!!!221&eSSDSDG^svda121^svda124^'

# 下面这种思路是这样的:
# 遍历字符串的元素,如果元素不是字母或者数字,则添加‘.’进list,
# 如果该元素是字母或者数字,则把该元素添加进list
# 然后,再把list转换为字符串
# 再把转换后的字符串以‘.’号分割成一个新的list(这时候list中的元素就是一个个仅包含数字或字母字符串)
# 遍历这个新的list中的元素,如果该元素不为空且同时包含数字和字母,则把该元素添加进list a中,同时把该元素的长度添加进list b 中
# 用下标遍历存储长度的list b ,如果元素的长度等于list b中最大元素的长度,则该元素就是符合条件的最长子字符串了,同时获得了该元素的下标
# 最后再用下标去list a 中取子字符串,并把结果存储在list lg中
# 程序结束,lg中的元素就是所有符合条件的子字符串了
def find_sonstr_lis(s):
ls = []
for i in range(len(s)):
if not s[i].isalnum():
ls.append('.')
else:
ls.append(s[i])
s = ''.join(ls)
ls = s.split('.')
a = [] # 字符串
b = [] # 长度
lg = [] # 最长字符串
for x in ls:
x = x.strip()
if len(x) > 0 and not x.isalpha() and not x.isdigit():
a.append(x)
b.append(len(x))
if len(b)>0:
for n in range(len(b)):
if b[n] == max(b):
lg.append(a[n])
return "最长子字符串为:{sun_scr} 长度为:{long}".format(sun_scr=lg, long=max(b))
else:
return "同时包含字母和数字的子字符串不存在" print(find_sonstr_lis(str_scr))

方法2:

# 根据上面的思路,我们也可以考虑另一种实现方式
# 上面是把字符串元素一个个遍历进一个list中,把非数字或字母的元素以‘.’号代替,再把list转换为字符串
# 那么其实可以不用这么麻烦,直接在字符串中替换就行了,思路是这样的:
# 遍历字符串元素,如果该元素不是数字或字母,则以'.'号替换字符串中的元素,从而得到一个仅包含数字、字母和'.'号的字符串
# 接下来就跟上面一样了,分割字符串,存储子字符串和长度,找出最大长度的子字符串即可
def find_sonstr_replace(s):
for i in s:
if not i.isalnum():
s = s.replace(i, '.')
ls = s.split('.')
a = []
b = []
lg = []
for x in ls:
x = x.strip()
if len(x)> 0 and not x.isdigit() and not x.isalpha():
a.append(x)
b.append(len(x))
if len(b)>0:
for n in range(len(b)):
if b[n] == max(b):
lg.append(a[n])
return "最长子字符串为:{sun_scr} 长度为:{long}".format(sun_scr=lg, long=max(b))
else:
return "同时包含字母和数字的子字符串不存在" print(find_sonstr_replace(str_scr))

方法3:

 
# 还有另外一种写法就是应用正则表达式,直接匹配出符合条件的子字符串调用findall()函数找出这些字符串并存入ls中,代码如下:

def find_sonstr_refindall(s,):
import re
lg = [] # 最长子字符串
b = []
pattern = re.compile(r'[A-Za-z]+[0-9]+[^%#*&\',;=?!\$\+\-\·\^\.\x22]*')
ls = re.findall(pattern,s)
for i in ls:
b.append(len(i))
if len(b)>0:
for x in range(len(b)):
if b[x] == max(b):
lg.append(ls[x])
return "最长子字符串为:{sun_scr} 长度为:{long}".format(sun_scr=lg, long=max(b))
else:
return "同时包含字母和数字的子字符串不存在" print(find_sonstr_refindall(str_scr))

方法4:

# 这种检索字符串的时候,使用正则表达式是很灵活的,下面这种方式实现起来就更简单了
# 直接 把字符串按非数字或字母分割,返回一个list 这时候list内的结果就是仅包含数字或字母的字符串了
def find_sonstr_resplit(s):
import re
ls = re.split(r'\W',s)
a,b,lg = [],[],[]
for i in ls:
if len(i)>0 and not i.isdigit() and not i.isalpha():
a.append(i)
b.append(len(i))
if len(b)>0:
for x in range(len(b)):
if b[x] == max(b):
lg.append(a[x])
return "最长子字符串为:{sun_scr} 长度为:{long}".format(sun_scr=lg, long=max(b))
else:
return "同时包含字母和数字的子字符串不存在"
print(find_sonstr_resplit(str_scr))

四种方法运行结果:

最长子字符串为:['svda123', 'svda121', 'svda124'] 长度为:7
最长子字符串为:['svda123', 'svda121', 'svda124'] 长度为:7
最长子字符串为:['svda123', 'svda121', 'svda124'] 长度为:7
最长子字符串为:['svda123', 'svda121', 'svda124'] 长度为:7 Process finished with exit code 0

 

python 查找字符串同时包含数字和字母的最长子字符串的几种实现方法的更多相关文章

  1. Python求包含数字或字母最长的字符串及长度

    一.求包含数字或字母最长的字符串及长度 org = 'ss121*2222&sdfs2!aaabb' result = [] #保存最终要输出的字符串 result_temp = [] #保存 ...

  2. C# 批量生成随机密码,必须包含数字和字母,并用加密算法加密

    要求:密码必须包含数字和字母 思路:1.列出数字和字符. 组成字符串 :chars 2.利用randrom.Next(int i)返回一个小于所指定最大值的非负随机数. 3. 随机取不小于chars长 ...

  3. .net 反射访问私有变量和私有方法 如何创建C# Closure ? C# 批量生成随机密码,必须包含数字和字母,并用加密算法加密 C#中的foreach和yield 数组为什么可以使用linq查询 C#中的 具名参数 和 可选参数 显示实现接口 异步CTP(Async CTP)为什么那样工作? C#多线程基础,适合新手了解 C#加快Bitmap的访问速度 C#实现对图片文件的压

    以下为本次实践代码: using System; using System.Collections.Generic; using System.ComponentModel; using System ...

  4. Oracle字符串中包含数字、特殊符号的排序

    问题描述: 某小区,需要按照小区.楼栋.单元号.房间号进行排序,但是按照地址描述排序时,因为字符串中包含数字,所以造成了如下的结果, 1号楼之后应该是2号楼,但是查询结果却是10号楼 . 尝试解决 使 ...

  5. MS SQL验证字符串是否包含有大小写字母

    昨晚有实现一个小功能,就是在MS SQL Server中,检查字符串是否包含有大小写字母.通常应用在字符串的复杂度. ) = N'SDFfgGRYJhhTYUJ' IF LOWER(@s) COLLA ...

  6. 随机生成N个字符(包含数字和字母)

    '************************************************************* ' Name: GetRandomString ' Purpose: 随机 ...

  7. QTP_随机生成N个字符(包含数字和字母)

    '************************************************************* ' Name: GetRandomString ' Purpose: 随机 ...

  8. JavaScript验证字符串只能包含数字或者英文字符的代码实例

    验证字符串只能包含数字或者英文字符的代码实例:本章节分享一段代码实例,它实现了验证字符串内容是否只包含英文字符或者数字.代码实例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  9. JS 用正则表达式,验证密码包含数字和字母的方法

    必须包含至少一位数字和一位字母,脚本方法如下: function CheckPassWord(password) {//密码必须包含数字和字母 var str = password; if (str ...

随机推荐

  1. springboot+cxf 开发webservice

    参考 https://www.cnblogs.com/fuxin41/p/6289162.html pom.xml <?xml version="1.0" encoding= ...

  2. css3将图片、内容换为灰色

    直接用filter属性-webkit-filter: grayscale(100%);-moz-filter: grayscale(100%);-ms-filter: grayscale(100%); ...

  3. 信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path:

    问题信息详细: 信息: The APR based Apache Tomcat Native library which allows optimal performance in productio ...

  4. VMware Ubuntu 窗口太小 未安装VMwareTools

    安装vmtools就行了:在虚拟机点击重新安装vmtools. 在虚拟机里点开挂载的,将那个压缩文件拉出document,解压 在命令行sudo运行.pl结尾的文件,一路回车就行了. 重启即可.

  5. 利用python实现冒泡排序

    1.先生存一个随机数组成的list 2.然后进行排序,把大的元素放在后面,小的元素放在前面,最终实现从小到大排列 首先生存一个随机数组成的list import random # print(sys. ...

  6. LSTM Accuracy

    Training iter #1: Batch Loss = 1.234543, Accuracy = 0.29866665601730347PERFORMANCE ON TEST SET: Batc ...

  7. 二叉树中的最大路径和 · Binary Tree Maximum Path Sum

    [抄题]: 给出一棵二叉树,寻找一条路径使其路径和最大,路径可以在任一节点中开始和结束(路径和为两个节点之间所在路径上的节点权值之和) [思维问题]: 不会写分合法 [一句话思路]: 用两次分治:ro ...

  8. spring-boot基础概念与简单应用

    1.spring家族 2.应用开发模式 2.1单体式应用 2.2微服务架构 微服务架构中每个服务都可以有自己的数据库  3.微服务架构应当注意的细节 3.1关于"持续集成,持续交付,持续部署 ...

  9. NABCD模型--软件工程

    1.N (Need 需求) 我们通过网络调查问卷的方式,收集样本数据,并对其进行分析和总结. 1.你是否为在校学生? 7.如果用过,你觉得还应该需要添加什么功能 通过调查发现,大多数学生并不是特别了解 ...

  10. Js下载文件到本地(兼容多浏览器)

    在客户端通过js下载文件,试过几种下载方式,iframe方式仅限于IE浏览器,window.open(url),location.href=url 这两种方式在chrome浏览器还会是直接打开文件而不 ...