关闭

[Python编程]正则表达式

标签: Python正则表达式爬虫
214人阅读 评论(0) 收藏 举报
分类:

[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>


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4377次
    • 积分:136
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:4篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论