python正则

python中的正则表达式

一、python中的转义字符

  正则表达式使用反斜杠"\"来表示特殊形式或用于转义字符,这里和python的基本语法有冲突所以用'\\\\'来表示正则表达式中的"\"。

二、正则表达式的常见元字符

元字符:是正则表达式中具有特殊含义的转义字符,用来规定位于元字符前面的字符,在目标对象中出现的模式。

.    匹配除换行符以外的任意字符
^    匹配字符串的开始
$    匹配字符串的结束
[]   用来匹配一个指定的字符类别
?   对于前一个字符字符重复0次到1次
*    对于前一个字符重复0次到无穷次
{}   对于前一个字符重复m次
{m,n} 对前一个字符重复为m到n次
\d   匹配数字,相当于[0-9]
\D   匹配任何非数字字符,相当于[^0-9]
\s   匹配任意的空白符,相当于[ fv]
\S   匹配任何非空白字符,相当于[^ fv]
\w   匹配任何字母数字字符,相当于[a-zA-Z0-9_]
\W   匹配任何非字母数字字符,相当于[^a-zA-Z0-9_]
\b   匹配单词的开始或结束

 三、正则表达式模块导入

3.1、查看正则表达式模块的方法

>>>def(re)

['DEBUG', 'DOTALL', 'I', 'IGNORECASE', 'L', 'LOCALE', 'M', 'MULTILINE', 'S', 'Scanner', 'T', 'TEMPLATE', 'U', 'UNICODE', 'VERBOSE', 'X', '_MAXCACHE', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__version__', '_alphanum', '_cache', '_cache_repl', '_compile', '_compile_repl', '_expand', '_pattern_type', '_pickle', '_subx', 'compile', 'copy_reg', 'error', 'escape', 'findall', 'finditer', 'match', 'purge', 'search', 'split', 'sre_compile', 'sre_parse', 'sub', 'subn', 'sys', 'template']

3.2、导入正则表达式

  import re

四、常用的正则表达式处理函数

4.1、re.match

  尝试从字符串的开始匹配正则,也就是匹配第一个单词

re.match(pattern, string, flags=0)
    第一个参数:规则
    第二个参数:表示要匹配的字符串
    第三个参数:标致位,用于控制正则表达式的匹配方式

匹配成功re.match方法返回一个匹配对象,否则返回None

我们可以使用group(num)或者groups()匹配对象函数来获取匹配表达式 

实例1:

import re
print(re.match('www', 'www.runoob.com').span())  # 在起始位置匹配
print(re.match('www', 'www.runoob.com')) print(re.match('com', 'www.runoob.com')) # 不在起始位置匹配

 结果:

(0, 3)#>=0&&<3
<_sre.SRE_Match object; span=(0, 3), match='www'> None

4.2、search方法

  re.search扫描整个字符串并返回第一个成功的匹配

search(pattern, string, flags=0)
    第一个参数:规则
    第二个参数:表示要匹配的字符串
    第三个参数:标致位,用于控制正则表达式的匹配方式

 re.search匹配成功返回一个匹配对象,否则返回None

我们可以使用group(num)或者groups()匹配对象函数来获取匹配表达式 

实例:

import re
print(re.search('www', 'www.runoob.com').span())  # 在起始位置匹配
print(re.search('com', 'www.runoob.com').span())         # 不在起始位置匹配

 结果:

(0, 3)
(11, 14)

 4.3、re.match和re.search的区别

re.match只匹配字符串的开始,如果字符串的开始不符合正则表达式,则匹配失败,函数返回None;re.search匹配整个字符串直接找到第一个匹配的

实例:

import re

line = "Cats are smarter than dogs";

matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
   print "match --> matchObj.group() : ", matchObj.group()
else:
   print "No match!!"

matchObj = re.search( r'dogs', line, re.M|re.I)
if matchObj:
   print "search --> matchObj.group() : ", matchObj.group()
else:
   print "No match!!"

 结果:

No match!!
search --> matchObj.group() :  dogs

 4.4、re.findall

re.findall 在目标字符串中查找符合规则的字符串

findall(pattern, string, flags=0)
   第一个参数:规则
   第二个参数:目标字符串
   但三个参数:后面还可以跟一个规则选择项

 实例:

import re

print(re.findall(r'abc',"abc kjhqwkhabcednk abc dsd"))
print(re.findall(r'(abc)',"abc kjhqwkhabcednk abc dsd"))
print(re.findall(r'\babc\b',"abc kjhqwkhabcednk abc dsd"))
print(re.findall(r'[abc]',"abc kjhqwkhabcednk abc dsd"))

 结果:

['abc', 'abc', 'abc']
['abc', 'abc', 'abc']
['abc', 'abc']
['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']

4.5、re.sub 用于替换字符串的匹配项

sub(pattern, repl, string, count=0)
    第一个参数:规则
    第二个参数:替换后的字符串
    第三个参数:字符串
    第四个参数:替换个数。默认为0,表示每个匹配项都替换

例子:

s = "hello python glad to see you"
print(re.sub(r'\s','-',s))#\s任意的空白字符

s = "hello python glad to see you"
print(re.sub(r'\s','-',s,3))#\s任意的空白字符,3表示替换3次

 结果:

hello-python-glad-to-see-you
hello-python-glad-to see you

4.6、re.split 用于分割字符串

split(pattern, string, maxsplit=0)
    第一个参数:规则
    第二个参数:字符串
    第三个参数:最大分割字符串,默认为0,表示每个匹配项都分割

 实例:

s = "hello python glad to see you"
print(re.split(r'\s',s))
print(re.split(r'\s.',s))
print(re.split(r'\s.*',s))
print(re.split(r'\s',s,3))

 结果:

['hello', 'python', 'glad', 'to', 'see', 'you']
['hello', 'ython', 'lad', 'o', 'ee', 'ou']
['hello', '']
['hello', 'python', 'glad', 'to see you']

4.7、re.complie 可以把正则表达式编译成一个正则对象

实例:

r1 = findall('\d+',"eqwe132qewqe2545qeqw5654")
print(r1)

r2 = re.compile('\d+')
#compile经过编译生成了对象
r3 = r2.findall("eqwe132qewqe2545qeqw5654") 
print(r3)

 结果:

['132','2545','5654']

['132','2545','5654']

 

posted @ 2016-05-19 13:42  还能和老板谈感情吗  阅读(223)  评论(0编辑  收藏  举报