Python中的字符串查找操作方法总结


Posted in Python onJune 27, 2016

基本的字符串位置查找方法
Python 查找字符串使用 变量.find("要查找的内容"[,开始位置,结束位置]),开始位置和结束位置,表示要查找的范围,为空则表示查找所有。查找到后会返回位置,位置从0开始算,如果每找到则返回-1。

str = 'a,hello' 
print str.find('hello') # 在字符串str里查找字符串hello 
>> 2     # 输出结果

朴素匹配算法

朴素匹配算法是对目标字符串和模板字符串的一一匹配。如果匹配得上,下标向右移一位, 否则清空并重新开始匹配。

target = 'abb aba'
pattern = 'aba'

def match(target, pattern):
  i = j = 0
  n, m = len(target), len(pattern)
  while i < n and j < m:
    # 如果字符相等则目标和模板的下标都向右移
    if target[i] == pattern[j]:
      i, j = i+1, j+1
    else:
      # 如果字符不相等则目标下标切换到不相等的下标
      # 模板下标移动到初始下标
      i = i - j + 1
      j = 0
  if j == m:
    return i - j
  return -1

把上面的加上print后打印一遍

#修改的地方
else:
  i = i -j + 1
  j = 0
  print(target[i], pattern[j], i, j)

# 打印结果
b a 1 0
b a 2 0
 a 3 0
a a 4 0

循环会一直到相等的匹配值, 这个方法效率低下,主要是在不匹配时会重新把模板字符循环一次。最多可能会出现 m * (n-m +1)次。m是模板字符的长度,n-m + 1是排除不等字符的次数。

KMP 算法

kmp是通过已知匹配的字符进行移位的算法,比如上面的abb 中跟abc比较的话 ab是已知的。

def match(target, pattern):
  i = j = 0
  n, m = len(target), len(pattern)
  while i < n and j < m:
    # 如果字符相等则目标和模板的下标都向右移
    if if j == -1 and target[i] == pattern[j]:
      i, j = i+1, j+1
    else:
      # 这里通过next 函数来判断位移个数
      i = i - j + pattern_next(pattern[:j])
      j = 0
  if j == m:
    return i - j
  return -1


def pattern_next(s):  
  prefix = [s[:i+1] for i in range(len(s)-1)]
  suffix = [s[i+1:] for i in range(len(s)-1)]
  l = list(set(prefix) & set(suffix))
  return len(l)
Python 相关文章推荐
python定时采集摄像头图像上传ftp服务器功能实现
Dec 23 Python
Python常用模块用法分析
Sep 08 Python
Python中类的定义、继承及使用对象实例详解
Apr 30 Python
python计算时间差的方法
May 20 Python
Python中标准库OS的常用方法总结大全
Jul 19 Python
python读取文本绘制动态速度曲线
Jun 21 Python
对Python中plt的画图函数详解
Nov 07 Python
对python指数、幂数拟合curve_fit详解
Dec 29 Python
Python如何调用JS文件中的函数
Aug 16 Python
python采集百度搜索结果带有特定URL的链接代码实例
Aug 30 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
May 22 Python
新手常见Python错误及异常解决处理方案
Jun 18 Python
解析Python中的__getitem__专有方法
Jun 27 #Python
详解Python中的__getitem__方法与slice对象的切片操作
Jun 27 #Python
Python使用smtplib模块发送电子邮件的流程详解
Jun 27 #Python
Python教程之全局变量用法
Jun 27 #Python
python设计模式大全
Jun 27 #Python
Python处理JSON时的值报错及编码报错的两则解决实录
Jun 26 #Python
Python使用自带的ConfigParser模块读写ini配置文件
Jun 26 #Python
You might like
预告映像公开!第1章续篇剧场版动画《Princess Principal Crown Handler》4月10日上映!
2020/03/06 日漫
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
PHP实现转盘抽奖算法分享
2020/04/15 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
jQuery实现延迟跳转的方法
2015/06/05 Javascript
基于JS模仿windows文件按名称排序效果
2016/06/29 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
2017/07/15 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
Vue 中使用lodash对事件进行防抖和节流操作
2020/07/26 Javascript
Python中让MySQL查询结果返回字典类型的方法
2014/08/22 Python
Python实现PS滤镜中马赛克效果示例
2018/01/20 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
python selenium执行所有测试用例并生成报告的方法
2019/02/13 Python
Python I/O与进程的详细讲解
2019/03/08 Python
详解python tkinter教程-事件绑定
2019/03/28 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
2019/05/15 Python
django自带调试服务器的使用详解
2019/08/29 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
2019/09/25 Python
pygame实现贪吃蛇游戏(上)
2019/10/29 Python
Python常用扩展插件使用教程解析
2020/11/02 Python
努比亚手机官网:nubia
2016/10/06 全球购物
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
新员工培训个人的自我评价
2013/10/09 职场文书
大学生实习感言
2014/01/16 职场文书
金融学专业大学生职业生涯规划
2014/03/07 职场文书
关爱女孩行动实施方案
2014/03/13 职场文书
就业协议书的作用
2014/04/11 职场文书
国旗下讲话演讲稿
2014/05/08 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
美德少年事迹材料500字
2014/08/19 职场文书
实习护士自荐信
2015/03/25 职场文书
介绍信范文大全
2015/05/07 职场文书
运动会开幕式新闻稿
2015/07/17 职场文书
2015年度学校应急管理工作总结
2015/10/22 职场文书
银行工作心得体会范文
2016/01/23 职场文书