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

python正则表达式

时间:2017-11-13 19:49:30      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:split   ble   不同   制表符   pytho   match   迭代器   std   adc   

正则表达式并不是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正则表达式

标签:split   ble   不同   制表符   pytho   match   迭代器   std   adc   

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

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