python正则表达式与re模块

python中的re模块常用函数/方法

0.正则表达式对象  (re.compile(patternflags=0)

将正则表达式编译成正则表达式对象,该对象可调用正则表达式对象方法如:re.match(),re.search(),re.findall等。

prog = re.compile(pattern)
result = prog.match(string)
//上下两种写法意义相同
result = re.match(pattern, string)

1.匹配对象及方法              (Match.group([group1...]),  Match.groups(),Match.groupdict())  (?P<name>

正则表达式对象成功调用match,search方法时返回的对象。主要有两个方法group()和groups()。(失败时返回None,而None调用这两个方法会出现异常)

group()函数通常用于普通方式显示所有的匹配部分,也可用序号检索各个匹配子组。

groups()函数用于获取一个包含所有匹配子字符串的元组。(在只有一个匹配子组时会返回空元组)

ob = re.compile(r‘(\w+)-(\d+)‘)  #()将正则表达式分成了两个子组
m = re.match(ob,‘abc-123‘)
m.group()          #完整匹配
‘abc-123‘
m.group(1)         #匹配子组1
‘abc‘
m.group(2)         #匹配子组2
‘123‘
m.groups()
(‘abc‘, ‘123‘)     #全部子组

(?P<name>)特殊符号可以使用名称标识符来保存匹配而不是数字。此时使用groupdict()方法返回一个字典,key为所给的名称标识符,而value为保存的匹配。

ob = re.compile(r‘(?P<first>\w+)-(?P<second>\d+)‘)
m = re.match(ob,‘abc-123‘)
m.groupdict()
{‘second‘: ‘123‘, ‘first‘: ‘abc‘}

2.匹配字符串      (re.match(patternstringflags=0), re.search())

match()方法从字符串的起始部分对模式进行匹配,如果匹配成功,返回一个匹配对象,失败则返回None。

search()方法从任意位置对正则表达式对象搜索第一次出现的匹配,成功则返回一个匹配对象,失败返回None。

>>> m = re.search(‘tif‘,‘beautiful‘)
>>> m.group()
‘tif‘     #匹配成功
>>> m.groups()
()           #返回空元组
>>> m = re.match(‘tif‘,‘beautiful‘)
>>> m.group()          #返回None,而None没有group()方法
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    m.group()
AttributeError: ‘NoneType‘ object has no attribute ‘group‘

3.查找每一次出现的位置  (re.findall(patternstringflags=0))      re.finditer()

findall()查询字符串中某个正则表达式模式全部的非重复出现情况。与search()类似,而与之不同的是,findall()方法返回一个列表,如果匹配成功则列表包含所有成功的匹配部分;如果匹配失败则返回空列表。

finditer()与findall类似(包含所有成功匹配),但它返回一个迭代器。

>>> s = ‘This and that and the‘
>>> re.findall(r‘(th\w+)‘,s,re.I)  //findall返回列表[‘This‘, ‘that‘, ‘the‘]>>> it = re.finditer(r‘(th\w+)‘,s,re.I)  //返回迭代器,用next()方法
>>> g = next(it)    
>>> g.groups()
(‘This‘,)>>> g = next(it)
>>> g.group(1)
‘that‘
>>> g = next(it)
>>> g.group(1)
‘the‘
>>> [g.group(1) for g in re.finditer(r‘(th\w+)‘,s,re.I)]  //列表推导式
[‘This‘, ‘that‘, ‘the‘]

4.搜索与替换   (re.sub(patternreplstringcount=0flags=0))      re.subn()

将某字符串中的所有匹配正则表达式的部分进行某种形式的替换。sub()与subn()几乎一样,sub()返回值是替换的个数,subn()返回值是元组 :(替换后的字符串,替换个数)。

>>> re.sub(‘hello‘,‘HELLO‘,‘hello the hello and world\n‘)  //将所有hello替换为HELLO
‘HELLO the HELLO and world\n‘  
>>> re.subn(‘hello‘,‘HELLO‘,‘hello the hello and world\n‘)
(‘HELLO the HELLO and world\n‘, 2)
>>> re.sub(‘hello‘,‘world‘,‘hello the hello and world\n‘,1)  //替换一个hello,即添加count参数
‘world the hello and world\n‘
>>> re.subn(‘[ed]‘,‘world‘,‘hello the hello and world\n‘)  //将e或d替换为world,替换了5个
(‘hworldllo thworld hworldllo anworld worlworld\n‘, 5)

5.分隔字符串  (re.split(patternstringmaxsplit=0flags=0))  //类似于字符串的split()用法

6.扩展符号  (前述方法的flags参数;而括号中为正则表达式的扩展符号,两种相同作用,用一种即可)

re.I/IGNORECASE    (?i)  不区分大小写的匹配
>>> re.findall(r‘(?i)yes‘,‘yes Yes YES!!‘)    //(?i)不区分大小写,正则表达式层面
[‘yes‘, ‘Yes‘, ‘YES‘]
>>> re.findall(r‘yes‘,‘yes Yes YES!!‘,re.I)  //re.I不区分大小写,python语言层面;下同
[‘yes‘, ‘Yes‘, ‘YES‘]
re.M/MULTILINE  (?m)   实现跨行搜索
>>> re.findall(r‘(?im)(^th[\w]+)‘,"""
This line is the first
another line
that line is the end""")
[‘This‘, ‘that‘]
re.S/DOTALL  (?s)        使  .  符号能表示\n符号
re.X/VERBOSE      (?x)        通过抑制在正则表达式中使用空白符来创建更易读的正则表达式
>>> re.search(r‘‘‘(?x)
\((\d{3})\)  //区号
[ ]  //空格
(\d{3})  //前缀
-  //横线
(\d{4})  //末尾数字
‘‘‘,‘(800) 555-1212‘).groups()
(‘800‘, ‘555‘, ‘1212‘)

(?:...)可以对正则表达式分组,但不保存该分组用于后续检索或应用。

>>> re.findall(r‘(?:\w+\.)*(\w+\.com)‘,‘baidu.com www.baidu.com code.baidu.com‘)  //不保存(\w+\.)*匹配的分组,因而www,code均不出现在结果中
[‘baidu.com‘, ‘baidu.com‘, ‘baidu.com‘]

(?=...)(?!...)可以实现前视匹配。前者正向前视断言,后者负向前视断言。通俗来说:(?=...)仅仅获取...表达式前的字符串,忽略该表达式;(?!...)则获取后面的字符串。

import re
result = re.findall(r‘\w+(?= van Rossum)‘,
"""
    guido van Rossum
    tim peter
    Alex Martelli
    Just van Rossum
    Raymond Hettinger
""")
print(result)

[‘guido‘, ‘Just‘]    //结果,忽略van Rossum而只保存该字符串前面的部分

正则表达式对象的另一种调用方法

Pattern.match(string[, pos[, endpos]])

Pattern.search(string[,pos[,endpos]])

Pattern.findall(string[, pos[, endpos]])

Pattern.finditer(string[, pos[, endpos]])

区别在于可调整pos,endpos参数来调整匹配范围。

import re
ob = re.compile(‘llo‘)
m1 = ob.match(‘hello world‘)
m2 = ob.match(‘hello world‘, 2)
print(m1, m2.group())
None llo            //match从头匹配,m1为空;从第三个开始匹配,则m2匹配成功

对正则表达式特殊符号无了解可访问: 正则表达式常用字符及符号

原文地址:https://www.cnblogs.com/lht-record/p/10223030.html

时间: 2024-10-08 21:02:38

python正则表达式与re模块的相关文章

python正则表达式之re模块方法介绍

python正则表达式之re模块其他方法 1:search(pattern,string,flags=0) 在一个字符串中查找匹配 2:findall(pattern,string,flags=0) 找到匹配,返回所有匹配部分的列表 In [1]: import re In [2]: str1 = 'imoooc videonum = 1000' In [3]: str1.find('1000') Out[3]: 18 In [4]: info = re.search(r'\d+',str1)

python 正则表达式re使用模块(match()、search()和compile())

摘录 python核心编程 python的re模块允许多线程共享一个已编译的正则表达式对象,也支持命名子组.下表是常见的正则表达式属性: 函数/方法 描述 仅仅是re模块函数 compile(pattern,flags=0) 使用任何可选的标记来编译正则表达式的模式 ,然后返回一个正则表达式对象 re模块函数和正则表达式对象的方法 match(pattern,string,flags=0) 尝试使用带有可选标记的正则表达式的模式来匹配字符串,成功则返回匹配的对象,失败则返回None search

python正则表达式及RE模块

正则表达式(匹配字符串)web界面正则匹配工具:http://tool.chinaz.com/regex/ 元字符 1 . 匹配除换行符之外的任意字符 2 \w 匹配数字字母下划线 3 \d 匹配数字 4 \t 匹配制表符 5 \n 匹配换行符 6 \s 匹配空白符(包含,空格,制表符和换行符) 7 \b 单词的边界 8 \W 匹配非数字字母下划线 9 \S 匹配非空白符 10 \D 匹配非数字 11 ^ 匹配开始符 12 $ 匹配结束符 13 | 或者,如果是有包含关系的,长的放左边 14 [

python 正则表达式与re模块

一.正则表达式 用途 用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑. #### 简单地说 就是用于字符串匹配的 字符组 在同一个位置可能出现的各种字符组成的一个字符组,在正则表达式中用[]表示 例子: 规则:[0123456789] 待匹配:8 匹配结果:True 规则:[0-9] 待匹配:6 匹配结果:True 规则:[a-z] 待匹配:c 匹配结果:True 规则:[A-Z] 待匹配:

Python 正则表达式、re模块

一.正则表达式 对字符串的操作的需求几乎无处不在,比如网站注册时输入的手机号.邮箱判断是否合法.虽然可以使用python中的字符串内置函数,但是操作起来非常麻烦,代码冗余不利于重复使用. 正则表达式是一种特殊的字符串序列,使用它可以非常方便的匹配一个字符串是否合法. 1)判断手机号是否合法:根据手机号码一共11位并且是只以13.15.18.17开头的数字这些特点,我们用python写了如下代码: content = input('>>>') if content.isdigit(): i

python正则表达式之re模块使用

python第一个正则表达式 r'imooc'  Pattern Match result In [2]: import re In [3]: pa = re.compile(r'imooc') #re的compile方法生成pattern对象 In [4]: type(pa) Out[4]: _sre.SRE_Pattern In [5]: pa. pa.findall pa.fullmatch pa.match pa.search pa.subn pa.finditer pa.groupin

常见的爬虫分析库(3)-Python正则表达式与re模块

在线正则表达式测试 http://tool.oschina.net/regex/ 常见匹配模式 模式 描述 \w 匹配字母数字及下划线 \W 匹配非字母数字下划线 \s 匹配任意空白字符,等价于 [\t\n\r\f]. \S 匹配任意非空字符 \d 匹配任意数字,等价于 [0-9] \D 匹配任意非数字 \A 匹配字符串开始 \Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串 \z 匹配字符串结束 \G 匹配最后匹配完成的位置 \n 匹配一个换行符 \t 匹配一个制表符 ^ 匹配字

python开发中对正则表达式及re模块的学习

正则表达式是个很牛逼的东西,不管是在javascript,还是在Python web开发(http://www.maiziedu.com/course/python-px/)中,我们都会遇到正则表达式,虽然javascript和Python的正则表达式区别不大,但是正则表达式是Python中必不可少的一部分,所以今天就跟大家一起讨论一下python中的re模块. re模块包含对正则表达式的支持. 什么是正则:  正则表达式是可以匹配文本片段的模式.  正则表达式'Python'可以匹配'pyth

Python中正则表达式(re模块)的使用

1.正则表达式的概述 (1)概述:正则表达式是一些由字符和特殊符号组成的字符串,他们描述了模式的重复或者表示多个字符,正则表达式能按照某种模式匹配一系列有相似特征的字符串.正则表达式是一种小型的.高度的专业化的编程语言, (2)Python语言中的正则表达式内嵌在Python中通过re模块实现,正则表达式被编译成一系列的字节码,然后由C编写的匹配引擎执行 2.字符匹配 (1)符号匹配 符号 描述 示例 实例说明 literal 匹配文本字符串的字面值literal root 匹配字符串root