我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python中怎么对正则表达式re包进行引用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python中怎么对正则表达式re包进行引用

这篇文章主要介绍“python中怎么对正则表达式re包进行引用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python中怎么对正则表达式re包进行引用”文章能帮助大家解决问题。

对正则表达式re包的简单引用

正则表达式一直是被我所忽略的东西,因为在之前的学习和开发中基本很少用到它。而且,之前学习正则表达式时感觉很懵逼,所以毅然决然的放弃了(QAQ),然而出来混总归还是要还的。最近在弄日志处理时,必须用到正则表达式,这就让我不得不拿起正则表达式了。在此记录一些自己学习的笔记与案例。

在python中导入re包

import re

一、re.match(pattern,string,flags=0)

尝试从字符串 开始 位置(看清楚,开始位置!!!)匹配一个模式。成功则返回一个match对象,失败则是none

参数说明:

  • pattern:正则表达式

  • string:字符串

  • flags:可选标志位

注:可选标志在下面简单说明

获取对象的方法:

使用group(num)  来获取对象小组内的内容。

举例:

#_*_coding:utf8_*_import re str1='010-011-110'pattern = r'\d{3}-\d{3}-\d{3}'match = re.match(pattern,str1)print match.group()print match.group(0)print match.group(1)print match.group(2)print match.group(3) #输出为:010-011-110010-011-110010011110

match()方法最重要的一点就是它是从字符串开始匹配的,切记这一点······我已经在这点上犯了很多错误了。

在写简单的正则表达式的时候我们可以用()来进行分组,以便于我们在后续处理中取值。后续也会谈到通过命名捕获的方式来取值。

二、re.search(pattern,string,flags=0)

跟match函数参数一样,它也是用来匹配字符串的。而最大的不同在于它可以从字符串的任意位置匹配,不像match一样,仅限于从字符串开始位置。参数跟match一样,就不做说明了,直接上例子。

#与match例子不同,001前面有很多空格str1='    001-010-110'#与match中的模式一样pattern = r'\d{3}-\d{3}-\d{3}'#若此时用match()函数,结果肯定是不匹配的。search = re.search(pattern,str1)print search.group()print search.group(0)print search.group(1)print search.group(2)print search.group(3) #结果:001-010-110001-010-110001010110

对于match和search,还是得说一遍,注意一个必须是从字符串开始处匹配,一个是任意位置。

三、检索和替换 re.sub()

用于替换字符串中的匹配项

re.sub(pattern,repl,string,count,flags)

参数说明:

  • pattern:正则表达式

  • repl:替换的字符串,可为一个函数

  • string:要被查找的原始字符串

  • count:被替换的次数,默认替换所有匹配项

  • flags:标志位      

#_*_coding:utf-8_*_import re phone = "888-7777-6666 #好牛的号码#删除字符串中的注释num = re.sub(r'#.*','',phone)print num#删除注释和-realphone = re.sub(r'\D','',phone)print realphone#结果为:888-7777-666688877776666

sub函数理解起来不难,但要主要的是在repl参数的使用。repl可以为一个函数。例如:

将字符串中的数字乘以二

def double(match):    value = int(match.group('value'))    return str(value*2)s='APPLE23EFG567'print re.sub(r'(?P<value>\d+)',double,s) #结果为: APPLE46EFG1134

因为repl为一个函数,所以再替换的时候会替换为函数的返回值。

注:?P<value>为正则表达式的命名捕获,在下面将会做简单记录

四、正则表达式之命名捕获

格式为: ?P<name>

在处理字符串取值时往往会用到

例子:

num = '001-010-110'pattern = r'(\d{3})-(\d{3})-(\d{3})'match = re.match(pattern,num)print match.group()       #001-010-110print match.group(1)      #001print match.group(2)      #010print match.group(3)      #110

在上述例子要分别获取每项的值就要使用group(num),而当正则表达式变得复杂的时候,再用num取值时,很有可能会取到错误的值。所以就提出使用命名捕获,下面为简单例子:

pattern = r'(?P<Area>\d{3})-(?P<zhong>\d{3})-(?P<wei>\d{3})'match = re.match(patter, num) print match.group('Area')     #001print match.group('zhong')    #010print match/group('wei')      #110

虽然在上述例子中使用命名捕获会将降低正则表达式的可读性,但命名捕获咋复杂的正则中,会准确获取想要的值(当然,正则肯定得写准确啊&middot;&middot;&middot;&middot;&middot;)

re库的正确使用姿势

前提假设:

  • 已经充分掌握PCRE风格正则表达式

  • 熟读re库文档

Why

正则表达式的强大已不用我赘述,Python 对此的支持也是十分强大,只不过:

re.search(pattern, string, flags=0)re.match(pattern, string, flags=0)......

你能很麻利地使用如上所示的一系列模块级别function 吗,如果你天天用 Python 搞正则匹配,相信你一定很熟练。但是如果你需要每次临时翻阅文档才能知道如何使用它,那么就要思考:是不是 API 在某种程度上设计不好了(有的语言的 pattern 极有可能不是放在首位)。

一般来说,API 的接口参数越少越好,最好的就是没有参数,调用者无脑调用,没有任何记忆负担。而 Python 的 re 库,在我看来,应该至少糅合了「命令式」与「OOP」两种风格,而且接口也不「最小化,正交」。

使用姿势

正确的姿势应该是:只用 OOP 风格,并且完全忘记 re 库提供的一系列模块级别的 function (如 re.search, re.match等)。

首先是每次都构造出 Regex 对象,然后由 Regex 对象得出 Match 对象,然后在 Regex 对象和 Match 对象上进行一系列操作。比如:

# 1. 构造    REGEX = re.compile($pattern, flags)     flags是re模块的常量 # 2. 获取 MatchObject    m = regex.search(string)   # 3. 后续 MatchObject 的使用    1. 获取分组  group()        2. groups    3. groupdict()

应用举例

比如我在自己构造的 PathUtils 中,就是如此使用的(我非常喜欢各种各样的 Utils ):

from __future__ import (absolute_import, unicode_literals) import re class PathUtils(object):    """路径操作的工具函数"""     _LINUX_ROOT = '/'    _LINUX_PATH_SPLITOR = '/'     @classmethod    def is_two_linux_path_contains(cls, path2, path3):        """两个Linux路径是否存在互相包含关系"""         if path2 == cls._LINUX_ROOT or path3 == cls._LINUX_ROOT:            return True         path2_split = path2.split(cls._LINUX_PATH_SPLITOR)        path3_split = path3.split(cls._LINUX_PATH_SPLITOR)         for item1, item2 in zip(path2_split, path3_split):            if item1 != item2:                return False         return True     @classmethod    def is_valid_linux_path(cls, path):        if not path:            return False         LINUX_PATH_REGEX = r'^(/[^/ ]*)+/?$'         return cls.is_valid_pattern(path, LINUX_PATH_REGEX)     @classmethod    def is_valid_windows_path(cls, path):        if not path:            return False         WINDOWS_PATH_REGEX = r'^[a-zA-Z]:\\(((?![<>:"/\\|?*]).)+((?<![ .])\\)?)*$'         return cls.is_valid_pattern(path, WINDOWS_PATH_REGEX)     @classmethod    def is_valid_path(cls, p):        if not p:            return False         return cls.is_valid_linux_path(p) or cls.is_valid_windows_path(p)     @classmethod    def is_valid_pattern(cls, value, pattern):        if not value:            return False         REGEX = re.compile(pattern, re.UNICODE)         m = REGEX.match(value)         return True if m else False

主要的功能函数就是:

@classmethoddef is_valid_pattern(cls, value, pattern):    if not value:        return False     REGEX = re.compile(pattern, re.UNICODE)     m = REGEX.match(value)     return True if m else False

这样一系列流程下来,我的感受就是,re 库的接口没有需要记忆,也没有需要临时翻阅文档的地方,并且我只用这一种风格(自己熟悉的,效率总是最高的),比如 re.compile肯定只需要传一个参数(flags不是必要的),REGEX_OBJ.match/search肯定只需要传need_search_string即可。

关于“python中怎么对正则表达式re包进行引用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python中怎么对正则表达式re包进行引用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python中怎么对正则表达式re包进行引用

这篇文章主要介绍“python中怎么对正则表达式re包进行引用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python中怎么对正则表达式re包进行引用”文章能帮助大家解决问题。对正则表达式re包的
2023-06-29

python正则表达式re模块怎么使用

这篇文章主要介绍“python正则表达式re模块怎么使用”,在日常操作中,相信很多人在python正则表达式re模块怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python正则表达式re模块怎么使用
2023-07-02

怎么进行Python正则表达式分析

今天就跟大家聊聊有关怎么进行Python正则表达式分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。今天写爬虫偶然想到了初学正则表达式时候,看过一篇文章非常不错。检索一下还真的找到了
2023-06-17

怎么在PHP中对正则表达式进行转义

这篇文章将为大家详细讲解有关怎么在PHP中对正则表达式进行转义,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.语法:string preg_quote ( string $str [, s
2023-06-14

在python正则表达式中是怎样正确使用正则表达式

这篇文章将为大家详细讲解有关在python正则表达式中是怎样正确使用正则表达式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。现在我们已经看了一些简单的正则表达式,那么我们实际在 Python
2023-06-17

python中怎么使用RE正则表达检验字符串

这篇文章主要介绍了python中怎么使用RE正则表达检验字符串,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Python主要用来做什么Python主要应用于:1、Web开发;
2023-06-14

Python中的正则表达式怎么用

这篇文章主要为大家展示了“Python中的正则表达式怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python中的正则表达式怎么用”这篇文章吧。1.正则表达式是什么很简单就是一种字符串匹配
2023-06-25

怎么理解并掌握python正则表达式和re模块

这篇文章主要介绍“怎么理解并掌握python正则表达式和re模块”,在日常操作中,相信很多人在怎么理解并掌握python正则表达式和re模块问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解并掌握pyth
2023-06-01

python的正则表达式怎么用

这篇文章主要为大家展示了“python的正则表达式怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python的正则表达式怎么用”这篇文章吧。一、正则表达式–元字符re 模块使 Python
2023-06-25

python中的正则表达式怎么使用

这篇文章主要讲解了“python中的正则表达式怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python中的正则表达式怎么使用”吧!在Python中需要通过正则表达式对字符串进行匹配
2023-07-04

在 Go 中对正则表达式进行预编译缓存

编程网今天将给大家带来《在 Go 中对正则表达式进行预编译缓存》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!问题内容
在 Go 中对正则表达式进行预编译缓存
2024-04-04

如何在Python中使用正则表达式进行模式匹配

正则表达式是一种强大的文本匹配工具,可以在Python中使用re模块来进行模式匹配。以下是使用正则表达式进行模式匹配的一般步骤:
如何在Python中使用正则表达式进行模式匹配
2024-02-22

Python正则表达re模块之findall()函数怎么使用

这篇文章主要介绍“Python正则表达re模块之findall()函数怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python正则表达re模块之findall()函数怎么使用”文章能帮助大
2023-07-02

Java中的正整数怎么利用正则表达式进行验证

Java中的正整数怎么利用正则表达式进行验证?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。具体如下:package des;import java.util.regex.M
2023-05-31

怎么在java中利用正则表达式对时间日期进行判断

这篇文章给大家介绍怎么在java中利用正则表达式对时间日期进行判断,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。实现这个功能自然少不了用到正则表达式,提高正则表达式的话,其实它的用法很简单,只需把这个表格记住并且会灵活
2023-05-31

hive中正则表达式怎么用

小编给大家分享一下hive中正则表达式怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! hive中的正则表达式还是很强大的。数据工作者平时也离不开正则表达式。
2023-06-03

linux中正则表达式怎么用

小编给大家分享一下linux中正则表达式怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!正则表达式就是处理字符串的方法,它以行为单位来进行字符串的处理行为,正
2023-06-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录