码迷,mamicode.com
首页 > 编程语言 > 详细

python-day6-正则表达式

时间:2016-06-13 23:41:52      阅读:430      评论:0      收藏:0      [点我收藏+]

标签:

定义

就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,
(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被
编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。

二元字符

.   ^   $   *   +   ?   { }   [ ]   |   ( ) \

实例

+           匹配+号前内容1次至无限次
? 匹配?号前内容0次到1次
{m} 匹配前面的内容m次
{m,n} 匹配前面的内容m到n次
*?,+?,??,{m,n}?    前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配

从前面的描述可以看到‘*‘,‘+‘和‘*‘都是贪婪的,但这也许并不是我们说要的,
所以,可以在后面加个问号,将策略改为非贪婪,只匹配尽量少的RE。示例,

1  print(re.findall(r"a(\d+?)","a23b")) # 非贪婪模式
2  >>>[2]
3 print( re.findall(r"a(\d+)","a23b"))
4 >>> [23]

\:
反斜杠后边跟元字符去除特殊功能,
反斜杠后边跟普通字符实现特殊功能。
引用序号对应的字组所匹配的字符串

1 #search查找匹配字符的起始位置与终止位置
2 n=re.search(r"(alex)(eric)com\2","alexericcomeric")
3 print(n.span())
4 >>>(0, 15)

\d 匹配任何十进制数;它相当于类 [0-9]。
\D 匹配任何非数字字符;它相当于类 [^0-9]。
\s 匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
\b: 匹配一个单词边界,也就是指单词和空格间的位置。
匹配单词边界(包括开始和结束),这里的“单词”,是指连续的字母、数字和
下划线组成的字符串。注意,\b的定义是\w和\W的交界,
这是个零宽界定符(zero-width assertions)只用以匹配单词的词首和词尾。
单词被定义为一个字母数字序列,因此词尾就是用空白符或非字母数字符来标
示的。

 

1 print( re.findall(r"abc\b","dzx &abc sdsadasabcasdsadasdabcasdsa"))
2 >>>[abc]
3 print( re.findall(r"\babc\b","dzx &abc sdsadasabcasdsadasdabcasdsa"))
4 >>>[abc]
5 print( re.findall(r"\babc\b","dzx sabc sdsadasabcasdsadasdabcasdsa"))
6 >>>[]

注意:
re.match(‘com‘, ‘comwww.runcomoob‘)
re.search(‘\dcom‘, ‘www.4comrunoob.5com‘)
一旦匹配成功,就是一个match object 对象,而match object 对象拥有以下方法:
group() 返回被 RE 匹配的字符串
start() 返回匹配开始的位置
end() 返回匹配结束的位置
span() 返回一个元组包含匹配 (开始,结束) 的位置
group() 返回re整体匹配的字符串,可以一次输入多个组号,对应组号匹配的字符串。

1. group()返回re整体匹配的字符串,
2. group (n,m) 返回组号为n,m所匹配的字符串,如果组号不存在,则返回indexError异常
3.groups()groups() 方法返回一个包含正则表达式中所有小组字符串的元组,从 1 到
所含的小组号,通常groups()不需要参数,返回一个元组,元组中的元就是正则
表达式中定义的组。

1 import re
2 a = "123abc456"
3 re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0) #123abc456,返回整体
4 re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1) 
5 >>>[123]
6 re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2) 
7 >>>[abc]
8 re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)
9 >>>[456]

group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3)
列出第三个括号匹配部分。

#re.findall  以列表形式返回所有匹配的字符串
#re.findall可以获取字符串中所有匹配的字符串。如:
p = re.compile(r\d+)
print(p.findall(one1two2three3four4))
>>>[1, 2, 3, 4]
#获取字符串中,包含‘oo‘的所有非字符单词
text = djks#dooljsdJ(
print(re.findall(r\w*oo\w*, text))
>>>[dooljsdJ]
#以数字分割字符串
p = re.compile(r\d+)
print(p.split(one1two2three3four4))
>>>[one, two, three, four, ‘‘]
#等同于
print(re.split(\d+,one1two2three3four4))
>>>[one, two, three, four, ‘‘]
1 a = abc123abv23456
2 b = re.findall(r23(a)?,a)
3 print(b)
4 >>>[a, ‘‘]
5 #匹配23后面为任意一个字符
6 b = re.findall(r23(?:a)?,a)
7 print(b)
8 >>>[23a, 23]

 

python-day6-正则表达式

标签:

原文地址:http://www.cnblogs.com/liguangxu/p/5582404.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!