笔记-python-lib-re

1.      re模块简介

re模块提供了与perl类似的正则匹配功能。

要搜索的模式和字符串都可以是Unicode字符串(str)以及8位字符串(bytes)。但是,不能混合Unicode字符串和8位字符串:也就是说,不能将Unicode字符串与字节模式匹配,反之亦然。

反斜杠:正则表达式使用了\表示转义,如果要匹配一个反斜杠,需要写成\\\\作为模式字符串。

另一种办法是声明字符串中的\不会以特殊方式处理,在字符串前加r,r’\n’是两个字符,而不是换行;

2.      模块内容

2.1.    compile

re.compile(pattern, flags=0)

compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。

参数:

pattern:一个字符串形式的正则表达式

flags:可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:

re.I 忽略大小写

re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境

re.M 多行模式,影响^和$

re.S 意为' . '包括换行符在内的任意字符(一般' . '不包括换行符)

re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库

re.X 为了增加可读性,忽略空格和' # '后面的注释

example:

pattern = re.compile(r’\d+?’)

2.2.  match

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

判断RE是否在字符串刚开始的位置匹配,返回match object。

注意:只要字符串开始部分满足匹配即成功,如果想要整串匹配可加$符。

example:

s = re.match('[a-z]+', str1)

2.3.    search

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

在字符串内查找模式匹配,只要找到第一个匹配然后返回一个match object对象,如果没有则返回None。

<_sre.SRE_Match object; span=(0, 5), match='eoorg'>

2.4.    split

split(pattern, string, maxsplit=0, flags=0)

以模式匹配的字符串的为界拆分字符串;

如果使用(),则模式组也包含在结果中;

str1 = 'eoorg943443g382\jgdo 349po\oer g34 345364 sfwe fwegre ewfwe fwef'

s = re.split(r'\d+', str1, 4)

['eoorg', 'g', '\\jgdo ', 'po\\oer g', ' 345364 sfwe fwegre ewfwe fwef']

s = re.split(r'(\d+)', str1, 4)

['eoorg', '943443', 'g', '382', '\\jgdo ', '349', 'po\\oer g', '34', ' 345364 sfwe fwegre ewfwe fwef']

maxsplit指定最大拆分次数,达到次数后,剩余字符串作为列表元素添加到列表尾部。

2.5.    findall

findall(pattern, string, flags=0)

遍历匹配,获取字符串中所有匹配的字符串,返回一个列表;如果模式有多个组,返回元组列表。

2.6.    sub

sub(pattern, repl, string, count=0, flags=0)

替换匹配的子串,返回替换后的字符串。

str1 = 'JGOOD is a handome boy, he is cool, clever, and so on...'

s = re.sub('\s+', '-', str1)

print(s)

参数count指替换个数,默认为0,表示每个匹配项都替换。

2.7.    subn

subn(pattern, repl, string, count=0, flags=0)

与sub所做操作一样,但返回一个元组,(new_string, number_of_sub_made)。

2.8.    match objects

上面讲过search,match会返回一个match object

str1 = 'JGOOD is a handome boy, he is cool, clever, and so on...'

s = re.search('[a-z]+', str1)

print(s)

<_sre.SRE_Match object; span=(6, 8), match='is'>

match objects支持以下方法和属性:

match.group([group1]) 可以不带参数,表示所有匹配项;带参数则表示参数所对应的项;

str1 = 'JGOOD is a handome boy, he is cool, clever, and so on...'

pattern = re.compile(r'\s+')

s = re.match('(\w+)\s(\w+)', str1)

print(s)

<_sre.SRE_Match object; span=(0, 8), match='JGOOD is'>

>>> s.group()

'JGOOD is'

>>> s.group(1)

'JGOOD'

>>> s.group(2)

'is'

>>>

match.groups() 返回一个tuple,包含所有子组

match.start()

match.end() 返回匹配结果开始结束字符的下标

match.span() 与上文同义,返回匹配结果开始结束下标,格式是元组;

match.re      以re.compile('(\\w+)\\s(\\w+)')格式返回该对象使用的正则表达式

笔记-python-lib-re的更多相关文章

  1. 笔记-python -asynio

    笔记-python -asynio 1.      简介 asyncio是做什么的? asyncio is a library to write concurrent code using the a ...

  2. 笔记-python操作mysql

    笔记-python操作mysql 1.      开始 1.1.    环境准备-mysql create database db_python; use db_python; create tabl ...

  3. 笔记-python异常信息输出

    笔记-python异常信息输出 1.      异常信息输出 python异常捕获使用try-except-else-finally语句: 在except 语句中可以使用except as e,然后通 ...

  4. 笔记-python lib-pymongo

    笔记-python lib-pymongo 1.      开始 pymongo是python版的连接库,最新版为3.7.2. 文档地址:https://pypi.org/project/pymong ...

  5. 笔记-python tutorial-9.classes

    笔记-python tutorial-9.classes 1.      Classes 1.1.    scopes and namespaces namespace: A namespace is ...

  6. MongoDB学习笔记:Python 操作MongoDB

    MongoDB学习笔记:Python 操作MongoDB   Pymongo 安装 安装pymongopip install pymongoPyMongo是驱动程序,使python程序能够使用Mong ...

  7. 机器学习实战笔记(Python实现)-08-线性回归

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

  8. 机器学习实战笔记(Python实现)-05-支持向量机(SVM)

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

  9. 机器学习实战笔记(Python实现)-04-Logistic回归

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

  10. 机器学习实战笔记(Python实现)-03-朴素贝叶斯

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

随机推荐

  1. C#中接口的深入浅出【转】

    C#中接口的深入浅出 假设我们公司有两种程序员:VB程序员,指的是用VB写程序的程序员,用clsVBProgramer这个类表示:Delphi程序员指的是用Delphi写程序的程序员,用clsDelp ...

  2. JAVA中数组介绍

    一.数组: 数组指一组数据的集合,数组中的每个数据被称作元素. 二.数组定义: 数组类型[] 数组名 = new 数组类型[元素个数或数组长度]: (注意:等号前面的[]里面不能写任何东西) 也可以以 ...

  3. java集合杂谈

    一:java集合框架如下图所示: 大致说明:看上面的框架图,先抓住它的主干,即Collection和Map. 1.Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作和属性.C ...

  4. android-上下文菜单的创建 - 随心

    //Menu设置//覆盖两个方法onCreateOptionsMenu(Menu menu).onOptionsItemSelected(MenuItem Item)//onCreateOptions ...

  5. EF ObjectQuery查询及方法

      string esql = "select value c from NorthwindEntities.Customers as c order by c.CustomerID lim ...

  6. HDU3371 Connect the Cities

    题目描述: 有n个小岛,其中有的小岛之间没有通路,要修这样一条通路需要花费一定的钱,还有一些小岛之间是有通路的.现在想把所有的岛都连通起来,求最少的花费是多少. 输入: 第一行输入T,代表多少组数据. ...

  7. OpenCV之CvMat、Mat、IplImage之间相互转换实例(转)

    OpenCV学习之CvMat的用法详解及实例 CvMat是OpenCV比较基础的函数.初学者应该掌握并熟练应用.但是我认为计算机专业学习的方法是,不断的总结并且提炼,同时还要做大量的实践,如编码,才能 ...

  8. UVA 1213 - Sum of Different Primes(递推)

    类似一个背包问题的计数问题.(虽然我也不记得这叫什么背包了 一开始我想的状态定义是:f[n = 和为n][k 个素数]. 递推式呼之欲出: f[n][k] = sigma f[n-pi][k-1]. ...

  9. UVA - 1639 Candy (概率,精度)

    X表示剩下的糖数量,如果最后打开的是p对应的盒子.划分:Xi表示剩下i个糖,最后一次选的概率为p, 前面的服从二项分布.根据全概率公式和期望的线性性,求和就好了. 精度处理要小心,n很大,组合数会很大 ...

  10. POJ 3280 Cheapest Palindrome(区间dp)

    dp[i][j]表示处理完i到j的花费,如果s[i] == s[j] 则不需要处理,否则处理s[i]或s[j], 对一个字符ch,加上ch或删掉ch对区间转移来说效果是一样的,两者取min. #inc ...