python 中的re模块

原文地址https://blog.csdn.net/github_38196368/article/details/70456082

Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析、复杂字符串分析和信息提取时是一个非常有用的工具。

1.re的简介
使用python的re模块,尽管不能满足所有复杂的匹配情况,但足够在绝大多数情况下能够有效地实现对复杂字符串的分析并提取出相关信息。python 会将正则表达式转化为字节码,利用 C 语言的匹配引擎进行深度优先的匹配。
Python通过re模块提供对正则表达式的支持。使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。

# encoding: UTF-8
import re
 
# 将正则表达式编译成Pattern对象
pattern = re.compile(r'hello')
  
# 使用Pattern匹配文本,获得匹配结果,无法匹配时将返回None
match = pattern.match('hello world!')
  
if match:
    # 使用Match获得分组信息
    print match.group()
  
### 输出 ###
# hello

2.re的正则表达式语法

正则表达式语法表
正则表达式特殊序列表

3. re的主要功能函数
常用的功能函数包括:compile、search、match、split、findall(finditer)、sub(subn)

re.compile(strPattern[, flag]) :用于将字符串形式的正则表达式编译为Pattern对象。
第一个参数strPattern为正则表达式,第二个参数flag是匹配模式,取值可以使用按位或运算符’|‘表示同时生效,比如re.I | re.M。另外,你也可以在regex字符串中指定模式,比如:re.compile(’(?im)pattern’)

python里提供了两种对正则表达式的操作:match和serch
1.match
函数原型:re.match(pattern, string, flags)

pattern为正则表达式,string为被匹配的文本,flags是匹配规则,如是否区别大小写等,若匹配到返回match object,若无,返回None

import re
data="oiudasmiasdiuthjdks79854.,;'34687132asd4f "
result=re.match('asd',data)
print(result.group(0))

2.search

函数原型:re.search(pattern, string, flags)

含义同上

import re
data="oiudasmiasdiuthjdks79854.,;'346871325asd4f "
result=re.search('asd',data)
print(result.group(0))

match 和 search的区别:match从字符串的开始位置开始匹配,若开始部分不匹配,则返回None,search则匹配整个字符串,只要字符串有符合表达式规则的就返回一个match object。

3.findall

函数原型:findall(pattern, string, flags=0)

pattern为正则表达式,string为被匹配的文本,flag为替换规则,如是否区分大小写。若匹配到一个及以上的结果返回一个list。

import re
data="oiudasmiasdiuthjdks79854.,;'346871325asd4f "
result=re.findall('asd',data)
print(result)

4.finditer

函数原型:finditer(pattern, string, flags=0)意义同上,只不过返回的是一个迭代器

import re
data="oiudasmiasdiuthjdks79854.,;'346871325asd4f "
result=re.finditer('asd',data)
print(result)
for x in result:
    print(x.group())

5.re.subn与re.sub
函数原型:
subn(pattern, repl, string, count=0, flags=0)

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

pattern为正则表达式,repl为替换的文本,string是被匹配的文本,count是替换次数,缺省为0,表示全部替换,flag是匹配规则,如是否区别大小写等,可省略。

subn返回的结果是一个元组(替换后的字符串,替换次数)。

sub仅返回替换后的字符串。

不区分大小写把首次匹配到的‘asd’文本替换为’jojo’

import re
data="oiudasmiAsdiuthjdks79854.,;'346871325asd4f "
result=re.subn('asd','jojo',data,count=1,flags=2)
print(result)

6.re.spilt
函数原型:split(pattern, string, maxsplit=0, flags=0)

pattern为正则表达式,string是被匹配的文本,maxspilt为分割次数,缺省下为0,flag为匹配规则。返回的是分割后的字串组成的元组

import re
data="oiudasmiasdiuthjdks79854.,;'346871325asd4f "
result=re.split('asd',data)
print(result)

7.escape

函数原型:escape(pattern)

把pattern里的除数字字母外所有的字符前加一个斜杠

import re
data="oiudasmiasdiuthjdks79854.,;'346871325asd4f "
result=re.escape('asd.;/.,')
print(result)

8.match object

属性:string :传入的文本

pos 和 endpos:开始的索引和结束的索引,索引默认以0开始

lastgroup:最后匹配到分组的名称,若该分组没有别名或者没有捕获,则为None

lastindex:最后匹配到分组的索引

import re
data="oiudasmiasdiuthjdks79854.,;'346871325asd4f "
result=re.search('asd',data)
print(result.string)
print(result.pos)
print(result.endpos)
print(result.lastgroup)
print(result.lastindex)

方法:

group():返回捕获的子串

start(),end():返回字串在原字符串开始/结束的索引

span():返回(start(),end())

expand(template):将匹配到的模版在template中展开

import re
data="oiudasmiasdiuthjdks79854.,;'346871325asd4f "
result=re.search('asd',data)
print(result.start())
print(result.end())
print(result.span())
print(result.expand('result is \g<0>'))

猜你喜欢

转载自blog.csdn.net/tumantou2hao/article/details/88606366