积累--正则表达式_'Themis'的博客-程序员宅基地

技术标签: 积累  

  • 一、背景知识
    • 1、什么是正则表达式
  • 二、re简介
    • 1、什么是re,为什么要使用re
    • 2、re常用组件及功能
      • 1)正则规则
        • 1)正则表达式中常用的字符含义
        • 2)预定义字符集(可以写在字符集[...]中) 
      • 2)re模块
  • 三、re模块
    • 1)compile()
    • 2)match()
    • 3)search()
    • 4)findall()
    • 5)split()
    • 6)其他方法
  • 四、re 实战场景
    • 1)正则实例
  • 五、re常见问题
  • 六、参考资料

一、背景知识

1、什么是正则表达式

正则表达式本身是一种小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序员们可以直接调用来实现正则匹配。正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行。

二、re简介

1、什么是re,为什么要使用re

Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。re 模块使 Python 语言拥有全部的正则表达式功能。

推荐时间比较充裕的同学仔细阅读:https://deerchao.net/tutorials/regex/regex.htm#greedyandlazy  配合:https://regex101.com/ 食用更佳

2、re常用组件及功能

1)正则规则

1)正则表达式中常用的字符含义
普通字符 匹配自身 abc abc
. 匹配任意除换行符"\n"外的字符(在DOTALL模式中也能匹配换行符 a.c abc
\

转义字符,使后一个字符改变原来的意思

  • 反斜杠后边跟元字符去除特殊功能;(即将特殊字符转义成普通字符)
  • 反斜杠后边跟普通字符实现特殊功能;(即预定义字符)
  • 引用序号对应的字组所匹配的字符串。

a\.c

a\\c

a.c

a\c

* 匹配前一个字符0或多次

abc*

ab

abccc

+ 匹配前一个字符1次或无限次 abc+

abc

abccc

? 匹配一个字符0次或1次 abc?

ab

abc

^ 匹配字符串开头。在多行模式中匹配每一行的开头 ^abc abc
$ 匹配字符串末尾,在多行模式中匹配每一行的末尾 abc$ abc
| 或。匹配|左右表达式任意一个,从左到右匹配,如果|没有包括在()中,则它的范围是整个正则表达式 abc|def abc
def
{ } {m}匹配前一个字符m次,{m,n}匹配前一个字符m至n次,若省略n,则匹配m至无限次 ab{1,2}c abc
abbc
[ ] 字符集。对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c]。[^abc]表示取反,即非abc。
所有特殊字符在字符集中都失去其原有的特殊含义。用\反斜杠转义恢复特殊字符的特殊含义。
a[bcd]e abe
ace
ade
() 被括起来的表达式将作为分组,从表达式左边开始每遇到一个分组的左括号“(”,编号+1.
分组表达式作为一个整体,可以后接数量词。表达式中的|仅在该组中有效。
(abc){2}a(123|456)c abcabc
a456c
2)预定义字符集(可以写在字符集[...]中) 
\d 数字:[0-9] a\bc a1c
\D 非数字:[^\d] a\Dc abc
\s 匹配任何空白字符:[<空格>\t\r\n\f\v] a\sc a c
\S 非空白字符:[^\s] a\Sc abc
\w 匹配包括下划线在内的任何字字符:[A-Za-z0-9_] a\wc abc
\W 匹配非字母字符,即匹配特殊字符 a\Wc a c
\A 仅匹配字符串开头,同^ \Aabc abc
\Z 仅匹配字符串结尾,同$ abc\Z abc
\b 匹配\w和\W之间,即匹配单词边界匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。 \babc\b

空格abc空格

\B [^\b] a\Bbc

abc


2)re模块

  • re.compile
  • re.search
  • re.match
  • re.split
  • re.findall
  • 其他模块

三、re模块

1)compile()

import re                                                   
tt = "Tina is a good girl, she is cool, clever, and so on..."
rr = re. compile (r '\w*oo\w*' )                                
print (rr.findall(tt))   #查找所有包含'oo'的单词


2)match()

print (re.match( 'com' , 'comwww.runcomoob' ).group())
print (re.match( 'com' , 'Comwww.runcomoob' ,re.I).group())


3)search()

print (re.search( '\dcom' , 'www.4comrunoob.5com' ).group())    #只返回第一个匹配



*注:match和search一旦匹配成功,就是一个match object对象,而match object对象有以下方法:

  • group() 返回被 RE 匹配的字符串
  • start() 返回匹配开始的位置
  • end() 返回匹配结束的位置
  • span() 返回一个元组包含匹配 (开始,结束) 的位置
  • group() 返回re整体匹配的字符串,可以一次输入多个组号,对应组号匹配的字符串。

a. group()返回re整体匹配的字符串,
b. group (n,m) 返回组号为n,m所匹配的字符串,如果组号不存在,则返回indexError异常
c.groups()groups() 方法返回一个包含正则表达式中所有小组字符串的元组,从 1 到所含的小组号,通常groups()不需要参数,返回一个元组,元组中的元就是正则表达式中定义的组。 


4)findall()

p = re. compile (r '\d+' )
print (p.findall( 'o1n2m3k4' ))       



5)split()

  • 说明:编译正则表达式模式,返回一个对象的模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率。)
  • 格式:re.split(pattern, string[, maxsplit])  按照能够匹配的子串将string分割后返回列表。可以使用re.split来分割字符串,如:re.split(r'\s+', text);将字符串按空格分割成一个单词列表。
  • 讲解:http://www.runoob.com/python/python-reg-expressions.html
  • API和usage:https://docs.python.org/2/library/re.html#re.split
  • 简单例子:
print (re.split( '\d+' , 'one1two2three3four4five5' ))

6)其他方法

其他方法可以参考:https://docs.python.org/2/library/re.html#module-re (官方文档)


四、re 实战场景

1)正则实例

  • 具体见:https://thief.one/2017/10/30/1/
  • 匹配IP地址的正则表达式 res = / (\d + )\.(\d + )\.(\d + )\.(\d + ) / g
    匹配空行的正则表达式:res = \n[\s| ] * \r
    匹配HTML标记的正则表达式:res = / <(. * )>. * <\ / \ 1 >|<(. * ) \ / > /
    匹配首尾空格的正则表达式:res = (^\s * )|(\s * $)
    匹配中文字符的正则表达式: res = [\u4e00 - \u9fa5] #python中需要转换为unicode
    匹配双字节字符(包括汉字在内):res = [^\x00 - \xff]
    user_phone = r "((?:13[0-9]|14[579]|15[0-3,5-9]|17[0135678]|18[0-9])\d{8})"
    user_name = r" "+u" ([\u4e00 - \u9fa5\·]{ 2 , 3 })"
    user_id_18 = r "([1-9]\d{5}(?:1[9,8]\d{2}|20[0,1]\d)(?:0[1-9]|1[0-2])(?:0[1-9]|1[0-9]|2[0-9]|3[0,1])\d{3}[\dxX])"  
    user_id_15 = r "([1-9]\d{7}(?:0[1-9]|1[0-2])(?:0[1-9]|1[0-9]|2[0-9]|3[0,1])\d{2}[\dxX])"
    car_id = r" "+u" ([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领]{ 1 }[A - Z]{ 1 }[A - Z0 - 9 ]{ 4 }[A - Z0 - 9 挂学警港澳]{ 1 })"
    email = r "([a-z_0-9.-]{2,64}@[a-z0-9-]{2,200}\.[a-z]{2,6})"
    address = r" "+u" ([\u4e00 - \u9fa5\·]{ 6 , 20 })"
    Python中针对 unicode 正则写法:
    res = ur "[\u4e00-\u9fa5]"

五、re常见问题

  • 欢迎补充

六、参考资料

正则表达式30分钟入门教程(推荐)

https://deerchao.net/tutorials/regex/regex.htm

python中的正则表达式(re模块)

https://www.cnblogs.com/tina-python/p/5508402.html

Python 正则表达式

https://thief.one/2017/10/30/1/
正则测试网页 https://regex101.com/


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/s000da/article/details/81000978

智能推荐

Miller_Rabin (米勒-拉宾) 素性测试-程序员宅基地

之前一直对于这个神奇的素性判定方法感到痴迷而又没有时间去了解。借着学习《信息安全数学基础》将素性这一判定方法学习一遍。首先证明一下费马小定理。  若p为素数,且gcd(a, p)=1, 则有 a^(p-1) = 1 (mod p)    基于以下定理      若(a, p)=1,{x| (x, p)=1}为模p下的一个完全剩余系,则{ax| (x, p)=1}也为模p下的一...

Linux下进行谷歌浏览器安装_乌版图 谷歌浏览器安装-程序员宅基地

1. 登入网址(https://www.google.cn/chrome/)或者自行百度来下载谷歌浏览器安装包或者输入网址直接下载:  32位:  wget https://dl.google.com/linux/direct/google-chrome-stable_current_i386.deb  64位:  wget https://dl.google.com/..._乌版图 谷歌浏览器安装

java powershell出错_Windows PowerShell的错误处理-程序员宅基地

我在以前的文章中已经说过,编写具有量产品质的PowerShell函数需要考虑三个要素:输入、输出和错误。我在上一篇文章中讨论了程序的参数(输入部分)。现在我们来研究一下无疑是最重要的要素---错误处理。简而言之,如果你不学习处理错误,你就无法做出具有量产品质的函数。如果不考虑错误状态,当出现问题的时候,你的用户将会面临一个非常糟糕的处境。错误管理可以分为三个部分:监测、错误的详细信息以及处理。让我..._windows powershell 用不了 javah

VGG-16详解-程序员宅基地

VGG16输入224*224*3的图片,经过的卷积核大小为3x3x3,stride=1,padding=1,pooling为采用2x2的max pooling方式:1、输入224x224x3的图片,经过64个卷积核的两次卷积后,采用一次pooling。经过第一次卷积后,c1有(3x3x3)个可训练参数2、之后又经过两次128的卷积核卷积之后,采用一次pooling3..._vgg-16图像识别matlab

宇恒项目总结-程序员宅基地

u.indexOf(" ") 判断字符串u的中间有没有空字符,没有返回-1,有就返回几个var width = window.innerWidth 获取浏览器宽度var height = window.innerHeight 获取浏览器高度$(window).resize(function(){}); 当浏览器大小变动时执行typeof(cc) == "undefined"...

国内前端行业十日谈——第二,三日-程序员宅基地

第二日:科班秀才【秀才仕途】Web前端工程师是一个特别的岗位,只存在于互联网领域。最近几年随着互联网产业的火爆,对前端工程师的需求量暴增,兵源几近枯竭。各大公司技术掌门一定都有过类似的苦恼:“招一个靠谱的前端工程师、难于上青天”。我想,一部分原因是,当前不少入道的前端工程师大都是转行而来,毕竟,正儿八经的学校里也不会教这玩意,觉得“切页面”有啥好教的,甚至不觉得html/css是一门语...

随便推点

BZOJ 4709: [Jsoi2011]柠檬 决策单调性 单调栈_决策单调性单调栈-程序员宅基地

4709: [Jsoi2011]柠檬Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 229 Solved: 100[Submit][Status][Discuss]DescriptionFlute 很喜欢柠檬。它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬。贝壳一共有 N (1 ≤ N ≤ 100,000) 只_决策单调性单调栈

Leetcode刷题笔记06:【26】删除排序数组中的重复项【27】移除元素【35】搜索插入位置【53】最大子序和(STL:unique C++特殊的遍历语法)_初始值一定要定义成理论上的最小最大值_MC_XiaoFang的博客-程序员宅基地

第四天 2021-3-6 每日刷两题刷题模块:数组 - 简单难度一、STL:unique()函数  unique函数属于STL中比较常用函数,它的功能是元素去重。  即”删除”序列中所有相邻的重复元素(只保留一个)。此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了(详细情况,下面会讲)。  由于它”删除”的是相邻的重复元素,所以在使用unique函数之前,一般都会将目标序列进行排序。  返回值是去重之后的尾地址,由于返回的是容器末尾,所以如果想得到去重后的size,需要减去_初始值一定要定义成理论上的最小最大值

Windows版Jenkins+SVN+Maven自动化部署环境搭建【转】-程序员宅基地

前言因今年公司新产品线较多,为了降低耦合,达到业务分离、重用,提高内部开发效率的目的,采用了基于服务组件、前后端分离的架构体系。与之前传统单应用架构相比,系统部署、配置更加复杂,为了能够频繁地将软件的最新版本,及时、持续地交付给测试团队及质量控制团队,以供评审,所以引入持续集成工具Jenkins,从而实现公司新产品持续集成,自动化部署。环境准备操作系统:Windows10Jav...

在linux中使用sar调优系统性能-程序员宅基地

关键字: sarsar默认在linux下没有安装,需要我们手工安装,一般建议源码方式安装,下载类似sysstat-6.1.3.tar.gz然后configure make make install即可使用.sar 命令行的常用格式:sar [options] [-A] [-o file] t [n]在命令行中,n 和t 两个参数组合起来定义采样..._sar提升系统

网站程序(案例)-程序员宅基地

Insus.NET分享一个案例网站程序。程序中95%的功能添加与设置在后台管理平台进行,剩余的5%就是前台网页的自定义设计。程序是使用.NET Framework 4.0 + ASP.NET + MS SQL Server 2008 R2 + VB.NET进行开发。功能与特色:文章编辑器使用:CuteEditor 。如果你在运行时,出现license的问题时,如下图:可以从官网上下载,然后覆盖BI...

吾爱破解工具箱 v 1.0-程序员宅基地

喜欢破解的网友可以看看!~ 详细功能请下载试用!~ \https://pan.baidu.com/s/1gfzBiq3 转载于:https://blog.51cto.com/haiyang457/1869956