浅谈Python中re.match()和re.search()的使用及区别


Posted in Python onApril 14, 2020

1.re.match()

re.match()的概念是从头匹配一个符合规则的字符串,从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回None。

包含的参数如下:

pattern: 正则模型

string : 要匹配的字符串

falgs : 匹配模式

match() 方法一旦匹配成功,就是一个match object对象,而match object对象有以下方法:

group() 返回被 RE 匹配的字符串

start() 返回匹配开始的位置

end() 返回匹配结束的位置

span()返回一个元组包含匹配 (开始,结束) 的位置

案例:

import re
# re.match 返回一个Match Object 对象
# 对象提供了 group() 方法,来获取匹配的结果
result = re.match("hello","hello,world")
if result:
  print(result.group())
else:
  print("匹配失败!")

输出结果:

hello

2.re.search()

re.search()函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None。

格式:re.search(pattern, string, flags=0)

要求:匹配出文章阅读的次数

import re

ret = re.search(r"\d+", "阅读次数为 9999")
print(ret.group())

输出结果:

9999

3.match()和search()的区别:

match()函数只检测RE是不是在string的开始位置匹配,

search()会扫描整个string查找匹配

match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none

举例说明:

import re
print(re.match('super', 'superstition').span())

(0, 5)

print(re.match('super','insuperable'))

None

print(re.search('super','superstition').span())

(0, 5)

print(re.search('super','insuperable').span())

(2, 7)

补充知识: jupyter notebook_主函数文件如何调用类文件

使用jupyter notebook编写python程序,rw_visual.jpynb是写的主函数,random_walk.jpynb是类(如图)。在主函数中将类实例化后运行会报错,经网络查找解决了问题,缺少Ipynb_importer.py这样一个链接文件。

浅谈Python中re.match()和re.search()的使用及区别

解决方法:

1、在同一路径下创建名为Ipynb_importer.py的文件:File-->download as-->Python(.py),该文件内容如下:

#!/usr/bin/env python
# coding: utf-8
# In[ ]:
 
import io, os,sys,types
from IPython import get_ipython
from nbformat import read
from IPython.core.interactiveshell import InteractiveShell
 
class NotebookFinder(object):
  """Module finder that locates Jupyter Notebooks"""
  def __init__(self):
    self.loaders = {}
 
  def find_module(self, fullname, path=None):
    nb_path = find_notebook(fullname, path)
    if not nb_path:
      return
 
    key = path
    if path:
      # lists aren't hashable
      key = os.path.sep.join(path)
 
    if key not in self.loaders:
      self.loaders[key] = NotebookLoader(path)
    return self.loaders[key]
 
def find_notebook(fullname, path=None):
  """find a notebook, given its fully qualified name and an optional path
  This turns "foo.bar" into "foo/bar.ipynb"
  and tries turning "Foo_Bar" into "Foo Bar" if Foo_Bar
  does not exist.
  """
  name = fullname.rsplit('.', 1)[-1]
  if not path:
    path = ['']
  for d in path:
    nb_path = os.path.join(d, name + ".ipynb")
    if os.path.isfile(nb_path):
      return nb_path
    # let import Notebook_Name find "Notebook Name.ipynb"
    nb_path = nb_path.replace("_", " ")
    if os.path.isfile(nb_path):
      return nb_path
 
class NotebookLoader(object):
  """Module Loader for Jupyter Notebooks"""
  def __init__(self, path=None):
    self.shell = InteractiveShell.instance()
    self.path = path
 
  def load_module(self, fullname):
    """import a notebook as a module"""
    path = find_notebook(fullname, self.path)
 
    print ("importing Jupyter notebook from %s" % path)
 
    # load the notebook object
    with io.open(path, 'r', encoding='utf-8') as f:
      nb = read(f, 4)
 
 
    # create the module and add it to sys.modules
    # if name in sys.modules:
    #  return sys.modules[name]
    mod = types.ModuleType(fullname)
    mod.__file__ = path
    mod.__loader__ = self
    mod.__dict__['get_ipython'] = get_ipython
    sys.modules[fullname] = mod
 
    # extra work to ensure that magics that would affect the user_ns
    # actually affect the notebook module's ns
    save_user_ns = self.shell.user_ns
    self.shell.user_ns = mod.__dict__
 
    try:
     for cell in nb.cells:
      if cell.cell_type == 'code':
        # transform the input to executable Python
        code = self.shell.input_transformer_manager.transform_cell(cell.source)
        # run the code in themodule
        exec(code, mod.__dict__)
    finally:
      self.shell.user_ns = save_user_ns
    return mod
sys.meta_path.append(NotebookFinder())

2、在主函数中import Ipynb_importer

import matplotlib.pyplot as plt
import Ipynb_importer
 
from random_walk import RandomWalk
 
rw = RandomWalk()
rw.fill_walk()
plt.scatter(rw.x_values, rw.y_values, s=15)
plt.show()

3、运行主函数,调用成功

ps:random_walk.jpynb文件内容如下:

from random import choice
 
class RandomWalk():
  def __init__(self, num_points=5000):
    self.num_points = num_points
    self.x_values = [0]
    self.y_values = [0]
    
  def fill_walk(self):
    while len(self.x_values) < self.num_points:
      x_direction = choice([1,-1])
      x_distance = choice([0,1,2,3,4])
      x_step = x_direction * x_distance
      
      y_direction = choice([1,-1])
      y_distance = choice([0,1,2,3,4])
      y_step = y_direction * y_distance
      
      if x_step == 0 and y_step == 0:
        continue
        
      next_x = self.x_values[-1] + x_step
      next_y = self.y_values[-1] + y_step
      
      self.x_values.append(next_x)
      self.y_values.append(next_y)

运行结果:

浅谈Python中re.match()和re.search()的使用及区别

以上这篇浅谈Python中re.match()和re.search()的使用及区别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中使用items()方法返回字典元素对的教程
May 21 Python
Python中的模块导入和读取键盘输入的方法
Oct 16 Python
python实现excel读写数据
Mar 02 Python
利用pyinstaller将py文件打包为exe的方法
May 14 Python
python读取和保存图片5种方法对比
Sep 12 Python
python使用MQTT给硬件传输图片的实现方法
May 05 Python
Python实现链表反转的方法分析【迭代法与递归法】
Feb 22 Python
Python处理PDF与CDF实例
Feb 26 Python
pycharm的python_stubs问题
Apr 08 Python
Python将list元素转存为CSV文件的实现
Nov 16 Python
opencv python 对指针仪表读数识别的两种方式
Jan 14 Python
Python实现抖音热搜定时爬取功能
Mar 16 Python
Jupyter加载文件的实现方法
Apr 14 #Python
利用jupyter网页版本进行python函数查询方式
Apr 14 #Python
python matplotlib:plt.scatter() 大小和颜色参数详解
Apr 14 #Python
python matplotlib.pyplot.plot()参数用法
Apr 14 #Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
Apr 14 #Python
简单了解pytest测试框架setup和tearDown
Apr 14 #Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
Apr 14 #Python
You might like
PHP判断文件是否存在、是否可读、目录是否存在的代码
2012/10/03 PHP
PHP 万年历实现代码
2012/10/18 PHP
PHP排序算法类实例
2015/06/17 PHP
php实现简单的MVC框架实例
2015/09/23 PHP
15 个 JavaScript Web UI 库
2010/05/19 Javascript
jquery获取自定义属性(attr和prop)实例介绍
2013/04/21 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
jQuery实现自定义右键菜单的树状菜单效果
2015/09/02 Javascript
原生JS实现美图瀑布流布局赏析
2015/09/07 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
2016/09/04 Javascript
简单理解Vue条件渲染
2016/12/03 Javascript
jQuery实现页面顶部下拉广告
2016/12/30 Javascript
微信小程序图片选择区域裁剪实现方法
2017/12/02 Javascript
微信小程序实现折叠面板
2018/01/31 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
详解Angular6 热加载配置方案
2018/08/18 Javascript
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
Element-UI+Vue模式使用总结
2020/01/02 Javascript
vue中echarts的用法及与elementui-select的协同绑定操作
2020/11/17 Vue.js
python实现的解析crontab配置文件代码
2014/06/30 Python
Python版微信红包分配算法
2015/05/04 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
2018/02/13 Python
python实现两个字典合并,两个list合并
2019/12/02 Python
Python实现七个基本算法的实例代码
2020/10/08 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
HTML 5 标签、属性、事件及浏览器兼容性速查表 附打包下载
2012/10/20 HTML / CSS
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
办公自动化专业大学生职业规划书
2014/03/06 职场文书
环保建议书
2014/03/12 职场文书
幼儿园亲子活动总结
2014/04/26 职场文书
寒山寺导游词
2015/02/03 职场文书
楚门的世界观后感
2015/06/03 职场文书
JavaScript+HTML实现学生信息管理系统
2021/04/20 Javascript