浅谈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 调用VC++的动态链接库(DLL)
Sep 06 Python
使用IPython来操作Docker容器的入门指引
Apr 08 Python
python中字符串类型json操作的注意事项
May 02 Python
教你使用python画一朵花送女朋友
Mar 29 Python
pandas的object对象转时间对象的方法
Apr 11 Python
强悍的Python读取大文件的解决方案
Feb 16 Python
Python3使用Matplotlib 绘制精美的数学函数图形
Apr 11 Python
numpy求平均值的维度设定的例子
Aug 24 Python
Python要如何实现列表排序的几种方法
Feb 21 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
Jul 03 Python
Python3如何在服务器打印资产信息
Aug 27 Python
基于Python爬取京东双十一商品价格曲线
Oct 23 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+jQuery实现自动补全功能源码
2013/05/15 PHP
php中关于socket的系列函数总结
2015/05/18 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
php-fpm中max_children的配置
2019/03/15 PHP
Javascript实现的分页函数
2006/12/22 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
jQuery实现简单的网页换肤效果示例
2016/09/18 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
Javascript中字符串相关常用的使用方法总结
2017/03/13 Javascript
vue.js 2.0实现简单分页效果
2019/07/29 Javascript
vue Element左侧无限级菜单实现
2020/06/10 Javascript
Python多线程爬虫简单示例
2016/03/04 Python
浅谈flask中的before_request与after_request
2018/01/20 Python
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
KIKO MILANO荷兰网上商店:意大利专业化妆品品牌
2017/05/12 全球购物
函授教育个人学习的自我评价
2013/12/31 职场文书
小加工厂管理制度
2014/01/21 职场文书
粗加工管理制度
2014/02/04 职场文书
法人任命书范本
2014/06/04 职场文书
商场促销活动策划方案
2014/08/18 职场文书
高中学校对照检查材料
2014/08/31 职场文书
党员干部批评与自我批评反四风思想汇报
2014/09/21 职场文书
2014年高二班主任工作总结
2014/12/16 职场文书
故意杀人罪辩护词
2015/05/21 职场文书
哈姆雷特读书笔记
2015/06/29 职场文书
女方家长婚礼致辞
2015/07/27 职场文书
学校学习型党组织建设心得体会
2019/06/21 职场文书
导游词之潮音寺
2019/09/26 职场文书
Python爬虫之爬取二手房信息
2021/04/27 Python
python字符串的多行输出的实例详解
2021/06/08 Python
用php如何解决大文件分片上传问题
2021/07/07 PHP
python字典进行运算原理及实例分享
2021/08/02 Python
python​格式化字符串
2022/04/20 Python
MySQL范围查询优化的场景实例详解
2022/06/10 MySQL