浅谈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将动态GIF图片倒放播放的方法
Nov 02 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
Mar 13 Python
python3+PyQt5使用数据库表视图
Apr 24 Python
python 读取DICOM头文件的实例
May 07 Python
把csv文件转化为数组及数组的切片方法
Jul 04 Python
Python绘制频率分布直方图的示例
Jul 08 Python
python文档字符串(函数使用说明)使用详解
Jul 30 Python
python Django编写接口并用Jmeter测试的方法
Jul 31 Python
django 简单实现登录验证给你
Nov 06 Python
python飞机大战 pygame游戏创建快速入门详解
Dec 17 Python
Python 跨.py文件调用自定义函数说明
Jun 01 Python
keras 两种训练模型方式详解fit和fit_generator(节省内存)
Jul 03 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+xslt在windows平台上
2006/10/09 PHP
PHP面向对象程序设计之类常量用法实例
2014/08/20 PHP
php pdo oracle中文乱码的快速解决方法
2016/05/16 PHP
php中使用websocket详解
2016/09/23 PHP
PHP生成(支持多模板)二维码海报代码
2018/04/30 PHP
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
2015/02/16 Javascript
Jquery使用val方法读写value值
2015/05/18 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
探究Javascript模板引擎mustache.js使用方法
2016/01/26 Javascript
基于JS实现的笛卡尔乘积之商品发布
2016/05/13 Javascript
javascript数字验证的实例代码(推荐)
2016/08/20 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
2017/02/10 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
解决ant Design中Select设置initialValue时的大坑
2020/10/29 Javascript
vue 中使用print.js导出pdf操作
2020/11/13 Javascript
Python中random模块用法实例分析
2015/05/19 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
python中的decimal类型转换实例详解
2019/06/26 Python
python的pstuil模块使用方法总结
2019/07/26 Python
tensorflow 报错unitialized value的解决方法
2020/02/06 Python
python 追踪except信息方式
2020/04/25 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
2020/04/30 Python
基于Python绘制个人足迹地图
2020/06/01 Python
Jupyter Notebook添加代码自动补全功能的实现
2021/01/07 Python
DAWGS鞋官方网站:鞋,凉鞋,靴子
2016/10/04 全球购物
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
SQL面试题
2013/04/30 面试题
学习雷锋精神心得体会范文
2014/03/12 职场文书
财产保全担保书
2015/01/20 职场文书
学习党史心得体会2016
2016/01/23 职场文书
经典格言警句:没有热忱,世间便无进步
2019/11/13 职场文书
Python turtle实现贪吃蛇游戏
2021/06/18 Python