浅谈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 相关文章推荐
django框架如何集成celery进行开发
May 24 Python
Python使用QRCode模块生成二维码实例详解
Jun 14 Python
解决python selenium3启动不了firefox的问题
Oct 13 Python
Django之无名分组和有名分组的实现
Apr 16 Python
python实现nao机器人身体躯干和腿部动作操作
Apr 29 Python
Pytorch实现GoogLeNet的方法
Aug 18 Python
springboot配置文件抽离 git管理统 配置中心详解
Sep 02 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
Jan 25 Python
Python的in,is和id函数代码实例
Apr 18 Python
深入了解Python 方法之类方法 &amp; 静态方法
Aug 17 Python
学点简单的Django之第一个Django程序的实现
Feb 24 Python
python关于集合的知识案例详解
May 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
正则表达式语法
2006/10/09 Javascript
PHP学习之PHP表达式
2006/10/09 PHP
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
用PHP编写和读取XML的几种方式
2013/01/12 PHP
PHP判断一个数组是另一个数组子集的方法详解
2017/07/31 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
2018/01/15 PHP
PHP实现动态创建XML文档的方法
2018/03/30 PHP
一个加密JavaScript的开源工具PACKER2.0.2
2006/11/04 Javascript
判断js对象是否拥有某一个属性的js代码
2013/08/16 Javascript
9行javascript代码获取QQ群成员具体实现
2013/10/16 Javascript
浅谈javascript中的事件冒泡和事件捕获
2016/12/28 Javascript
jQuery中的on与bind绑定事件区别实例详解
2017/02/28 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
angular2+nodejs实现图片上传功能
2017/03/27 NodeJs
js禁止浏览器页面后退功能的实例(推荐)
2017/09/01 Javascript
ionic选择多张图片上传的示例代码
2017/10/10 Javascript
vue移动端实现下拉刷新
2018/04/22 Javascript
jQuery实现的中英文切换功能示例
2019/01/11 jQuery
js屏蔽退格键(backspace或者叫后退键与F5)
2019/02/10 Javascript
详解vue项目打包步骤
2019/03/29 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
2020/05/14 Javascript
python中 chr unichr ord函数的实例详解
2017/08/06 Python
读取本地json文件,解析json(实例讲解)
2017/12/06 Python
Python实现模拟登录网易邮箱的方法示例
2018/07/05 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
postman传递当前时间戳实例详解
2019/09/14 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
CSS3截取字符串实例代码【推荐】
2018/06/07 HTML / CSS
Elizabeth Gage官网:英国最好的珠宝设计之一
2020/09/26 全球购物
体育系毕业生自荐信
2014/06/28 职场文书
英语课前三分钟演讲稿
2014/08/19 职场文书
小学生思想品德评语
2014/12/31 职场文书
部门优秀员工推荐信
2015/03/24 职场文书
2015年实习生工作总结报告
2015/04/28 职场文书
Docker与K8s关系介绍不会Docker也可以使用K8s
2022/06/25 Servers