[Python编程]正则表达式

[Python编程]正则表达式

目录:

1,引言

2,正则表达式语法

3,re模块


1,引言

正则表达式具有在文本中检索某种模式的能力,正则表达式(RE)为高级文本模式匹配,以及搜索-替代等功能提供了基础。正则表达式(RE)是一些由字符和特殊符号组成的字符串,它们描述了这些字符和字符的某种重复方式,因此能按某种模式匹配一个有相似特征的字符串的集合,因此能按某模式匹配一系列有相似特征的字符串。

很多语言都支持正则表达式,Python也不例外,Python也是有正则表达式模块re让Python更加适合处理文本和数据。Python通过标准库的re模块支持正则表达式(RE)。


2,正则表达式语法

下面是Python中正则表达式的一些匹配规则:(来源于Python核心编程)


2.1 数量词的贪婪模式与非贪婪模式

正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪的则相反,总是尝试匹配尽可能少的字符。例如:正则表达式"ab*"如果用于查找"abbbc",将找到"abbb"。而如果使用非贪婪的数量词"ab*?",将找到"a"。

2.2  反斜杠的困扰

与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。同样,匹配一个数字的"\\d"可以写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。


3,re模块

Python的re模块:核心函数和方法

模块的函数:

compile(pattern,flag=0) :对正则表达式模式pattern进行编译,flag是可选标识符,并返回一个regex对象

可以把正则表达式编译成一个正则表达式对象。可以把那些经常使用的正则表达式编译成正则表达式对象,这样可以提高一定的效率。

re模块的函数和regex对象的方法:

match(pattern,string,flag=0):尝试用正则表达式模式pattern匹配字符串string,flag是可选标识符,如果匹配成功,则返回一个匹配对象,否则返回None

search(pattern,string,flag=0):在字符串string中搜索正则表达式模式pattern的第一次出现,flag是可选标识符,如果匹配成功。则返回一个匹配对象,否则返回None

findall(pattern,string[,flags]):在字符串string中搜索正则表达式模式pattern的所有(非重复)出现:返回一个匹配对象的列表

finditer(pattern,string[,flags]):和findall()相同,但是返回的不是列表而是迭代器,对于每一个匹配,该迭代器返回一个匹配对象

split(pattern,string,max=0):更加正则表达式pattern中的分隔符吧字符string分割成为一个列表,返回成功匹配的列表,最多分割max次(默认是分割所有匹配的地方)

sub(pattern,repl,string,max=0):把字符串string中所有匹配正则表达式pattern的地方替换成字符串repl,如果max的值有给出,则对所有匹配的地方进行替换

匹配对象的方法:
group(num=0)
:返回全部匹配对象(或者指定编号是num的子组)

groups():返回一个包含全部匹配的子组的元组(如果没有成功匹配,就返回一个空元组)

<span style="font-size:18px;">import re

pattern = re.compile(r'foo')
m = re.match(pattern,'foohelloworldpython')
if m is not None:
	m.group()
else:
	print 'None'
'foo'

m = re.search(pattern,'hellopythonfoo')
if m is not None:
	m.group()
else:
	print 'None'

'foo'

re.findall(pattern,'foo findfooitem food')
['foo','foo','foo']

re.sub('X','Mr.Smith','attn:X\n\nDear X,\n')
'attn:Mr.Smith\012\012Dear Mr.Smith,\012'

re.split(':','str1:str2:str3')
['str1','str2','str3']</span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值