首页 > 编程语言 > 详细

python正则表达式

时间:2017-11-13 19:12:14      阅读:259      评论:0      收藏:0      [点我收藏+]

正则表达式并不是python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。

得益于这一点,再提供正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言所支持的语法数量不一样。

正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符串比较,如果每一个字符都能匹配成功,则匹配成功,一旦有匹配不成功的字符串则匹配失败。

下面列出python支持的正则表达式元字符和语法。

字符
字符 说明 匹配对象 匹配结果
一般字符 匹配自身 abc abc
. 除换行符之外的任何字符 a.c abc/acc/a2c
转义字符 转义字符,使后一个字符改变原有的意思。例如匹配*,可以\* a\*c a*c
[]

字符集。匹配字符集中的任意一个字符。可以缩写,

比如[0-9]、[A-Z],还有一些特殊的字符,比如说[^...],表示除...之外

[*]匹配*这个字符,在字符集中特殊字符都失去了原有的含义。

a[1-9e-g]c a3c/agc

 

 

 

 

 

 

 

 

预定义字符集
字符 说明 匹配对象 匹配结果
\s 空白字符      a\sc a c
\S 非空白字符 a\Sc a1c 或abc
\d 数字字符

a\dc

a2c
\D 非数字字符 a\Dc adc
\w 数字、字母、下划线 a\wc a_c
\W 非数字字母下划线 a\Wc a c
\n 换行符  

 

\t 制表符  

 

 

 

 

 

 

 

 

 

 

 

 

数量词
字符 说明 匹配对象 匹配结果
* 匹配0或多个任意字符 李.* 李/李洋/李杰傻...
? 匹配0或1个任意字符 李.? 李/李杰
+ 匹配1或多个任意字符 李.+ 李洋/李杰傻...
{m} 匹配m个 李{3} 李李李
{m,}/{,n} 匹配0-n或者大于m个 李{2,} 李李李/李李李李/李李李李李..
{m,n} 匹配m到n个字符 李{3,5} 李李李/李李李李/李李李李李..

 

 

 

 

 

 

 

 

边界匹配
字符 说明 匹配对象 匹配结果
^ 以什么开头    
$ 以什么结尾    
\A 仅匹配字符串开头    
\Z 仅匹配字符串结尾    

 

 

 

 

 

 

 

re模块中常用的方法

(1)findall:找到所有符合的对象,返回一个列表

>>> re.findall(‘o‘,‘Hello,world‘)
[‘o‘, ‘o‘]
>>> re.findall(‘l‘,‘Hello,world‘)
[‘l‘, ‘l‘, ‘l‘]

 

(2)search:找到第一个,返回值用group()打印

>>> re.search(‘l‘,‘Hello,world‘)
<_sre.SRE_Match object; span=(2, 3), match=‘l‘>
>>> ret = re.search(‘l‘,‘Hello,world‘)
>>> ret.group()     #使用group()打印
‘l‘

 

(3)match:从开始匹配,返回值用group()打印

>>> ret1 = re.match(‘l‘,‘Hello,world‘)   #必须匹配的是首字符
>>> ret1.group()  
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: ‘NoneType‘ object has no attribute ‘group‘
>>> ret1 = re.match(‘H‘,‘Hello,world‘)
>>> ret1.group()
‘H‘

 

(4)split:根据正则表达式的方法分割

>>> ret2 = re.split(‘[ac]‘,‘abcacd‘)
>>> ret2
[‘‘, ‘b‘, ‘‘, ‘‘, ‘d‘]
 #以a分割,返回‘‘和‘bcacd
#分割bcacd,以c分割,反回一个b
#分割acd,以a分割,返回一个空‘‘
#分割cd,以c分割,返回一个空‘‘,剩余一个d不能分割

用正则表达式切分字符串 比用固定的字符更加灵活。

>>> re.split(‘\s‘,‘a b  c‘)
[‘a‘, ‘b‘, ‘‘, ‘c‘]
>>> re.split(‘\s+‘,‘a b  c‘)  #必须加一个”+“
[‘a‘, ‘b‘, ‘c‘]

>>> re.split(‘[\s,]‘,‘a, b,  c‘)
[‘a‘, ‘‘, ‘b‘, ‘‘, ‘‘, ‘c‘]
>>> re.split(‘[\s,]+‘,‘a, b,  c‘)  #有加号就可以匹配多个空格。
[‘a‘, ‘b‘, ‘c‘]

 

 

(5)sub/subn:根据正则表达式的方法替换

>>> re.sub(‘\d‘,‘NUM‘,‘my old is 56‘)
‘my old is NUMNUM‘
>>> re.subn(‘\d‘,‘NUM‘,‘my old is 56‘)
(‘my old is NUMNUM‘, 2)

 

(6)compile:编译正则,将要匹配的对象提前进行编译

>>> obj = re.compile(‘123‘)
>>> ret4 = re.search(obj,‘abc123456cda‘)
>>> ret4.group()
‘123‘

 

(7)finditer:返回一个迭代器

>>> ret5 = re.finditer(‘l‘,‘Hello,world‘)
>>> ‘__next__‘ in dir(ret5)
True

 

python正则表达式

原文:http://www.cnblogs.com/yangmingxianshen/p/7827515.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!