浅谈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设计模式之抽象工厂模式
Aug 25 Python
Python遍历目录并批量更换文件名和目录名的方法
Sep 19 Python
python使用tensorflow保存、加载和使用模型的方法
Jan 31 Python
基于Python 装饰器装饰类中的方法实例
Apr 21 Python
python实现自动解数独小程序
Jan 21 Python
PyTorch的深度学习入门教程之构建神经网络
Jun 27 Python
Python版中国省市经纬度
Feb 11 Python
python实现简单的购物程序代码实例
Mar 03 Python
Python内置函数locals和globals对比
Apr 28 Python
Python如何发送与接收大型数组
Aug 07 Python
利用Python网络爬虫爬取各大音乐评论的代码
Apr 13 Python
如何使用pdb进行Python调试
Jun 30 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
2006/12/23 PHP
php读取der格式证书乱码解决方法
2015/06/22 PHP
php判断邮箱地址是否存在的方法
2016/02/13 PHP
php简单实现数组分页的方法
2016/04/30 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
2016/10/10 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
2017/09/04 PHP
Nginx实现反向代理
2017/09/20 Servers
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
2019/03/30 PHP
JavaScript 脚本将当地时间转换成其它时区
2009/03/19 Javascript
jQuery 学习第七课 扩展jQuery的功能 插件开发
2010/05/17 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
2013/08/29 Javascript
jQuery选择器源码解读(二):select方法
2015/03/31 Javascript
Javascript中的数据类型之旅
2015/10/18 Javascript
详解nodejs操作mongodb数据库封装DB类
2017/04/10 NodeJs
js使用html2canvas实现屏幕截取的示例代码
2017/08/28 Javascript
实现jquery放大镜的两种方法
2018/02/22 jQuery
详解webpack-dev-server 设置反向代理解决跨域问题
2018/04/18 Javascript
基于layui table返回的值的多级嵌套的解决方法
2019/09/19 Javascript
javascript设计模式 ? 代理模式原理与用法实例分析
2020/04/16 Javascript
vue实现匀速轮播效果
2020/06/29 Javascript
Vue 实例中使用$refs的注意事项
2021/01/29 Vue.js
python写xml文件的操作实例
2014/10/05 Python
python发送HTTP请求的方法小结
2015/07/08 Python
python实时监控cpu小工具
2018/06/21 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
在Python中调用Ping命令,批量IP的方法
2019/01/26 Python
python logging 重复写日志问题解决办法详解
2020/08/04 Python
python判断一个变量是否已经设置的方法
2020/08/13 Python
Notino匈牙利:购买香水和化妆品
2019/04/12 全球购物
我的求职计划书
2014/01/10 职场文书
全国道德模范事迹
2014/02/01 职场文书
医科大学毕业生自荐信
2014/02/03 职场文书
超市创业计划书
2014/09/15 职场文书
销售会议开幕词
2015/01/28 职场文书
2016教师学习党章心得体会
2016/01/15 职场文书