python 正则表达式

来源:互联网 发布:java Renameto什么意思 编辑:程序博客网 时间:2024/05/02 05:05

正则表达式各个语言的语法都一样,但是支持程度可能不同,python中的正则表达式可能效率不如str某些自带的方法,

但是它的功能是非常强大的。

先说说常用的正则表达式语法,然后说说python中的正则表达式模块


一.常用的正则表达式语法

1.管道符号 |

逻辑或的意思,即匹配任意一个即可


2. 匹配任意字符符号 .

即匹配任意一个字符


3.限定开头和结尾符号 ^ 和 $

^ 限定匹配的开头    ^hello        必须以hello开头

$限定匹配的结尾     world$       必须以world结尾

配合使用 ^helloworld$        匹配helloworld

补充:

\b和\B也用来匹配单词边界,\b匹配的必须是开头,\B是从单词中间开始匹配

匹配关键字字符要加反斜线 '\'


4.[ ],匹配[]中的任意一个字符

类似c++的string.find_first_of(str),在string搜寻到str出现的第一个字符

这里[ ]就类似str,只是匹配任意的而已

[ ]可以组合多个[ ][ ][ ] ,注意多个[ ]匹配结果是较多的,如果我们只匹配个别的话,用更严格的匹配效率会高

例子:

h[i,e],匹配出来包含hi和he 


5.指定范围‘-’ 和否定 '^'

[123456789]等价于[1-9]

不匹配[1-9]等价于[^1-9]


6.(*, +, ?, {} )

*表示匹配它左边的正则表达式出现0或者0次以上

例如:ba*匹配b, ba, baa...

+表示匹配它左边的正则表达式出现至少一次以上

例如:ba+匹配ba, baa...

?表示匹配它左边的正则表达式出现0或者一次以上

例如:ba?匹配b, ba, baa...

{}表示出现次数的限定{9}出现9次,{1-9}出现1-9次中任何即可

例如:ba{1-2}匹配ba, baa

注意:?问号还有一种含义,在紧跟着上述表示重复符号的后面时,表示匹配的字符串越短越好


7.匹配特殊字符集合

\d可以表示匹配[0-9]数字,\D表示不匹配十进制数字字符

\w表示整个字符数字集合[A-Za-z0-9]

\s表示空白字符

练习:

<1.电话号码: 888-222-2020  

\d{3}-\d{3}-\d{4}

<2.邮箱XXX@XXX.com

\w+@\w+\.com                      ( 注意 . 是特殊字符,要加上\ ,为\. )


8.元括号( )组建组

我们可以匹配出我们想要匹配的数据,但是如果我们有时对我们需要匹配的数据部分或者全部感兴趣想要看看他们

是什么并且运用它而不是仅仅知道它是否在里面,那么就要用到( )来把我们想要的匹配结果保存下来

比如\d+(\.\d*)?, 表示浮点数

加上括号我们可以对小数点后面的数据(( )中的数据)进行访问了。


二.python中的正则表达式

python中正则表达式在re模块中
常用的正则表达式函数有compile和match及search
python是有编译过程的,编译后即.pyc文件,我们直接使用.pyc文件速度是有很大提升的,因为节省了编译过程

而正则表达式也一样,我们在匹配之前可进行编译,生成regex对象,从而提升性能。
compile函数就是用来编译的

group和groups是匹配成功后返回匹配的对象,groups返回的是包含全部匹配的元组

1.compile( )编译模块函数
compile( )函数不是必须的,如果我们不提前预编译,匹配函数在执行时也会进行编译,速度会有所降低
#!/usr/bin/env python#coding:UTF-8import repattern = re.compile('^hel')m = pattern.match('hello world!')if m:    print m.group()    print type(m.group())else:    print 'none'



2.match( )匹配字符串
match(pattern, string, flags = 0)   注:flags标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
从字符串的开头开始进行匹配的,成功返回一个匹配对象,失败则返回None
注意是从开头开始搜寻,若开头没有则返回not found
#!/usr/bin/env python#coding:UTF-8import reStr = 'hello world'm = re.match('hello', Str)if m is not None:    print m.group()    print type(m.group())else:    print 'not found'



3.search( )函数
我们一般搜索一个字符串出现在中间位置的概率较大。
search和match差不多,但是search会在任意位置匹配,返回一个匹配对象。
#!/usr/bin/env python#coding:UTF-8import reStr = 'hello world'm = re.search('o w', Str)if m is not None:    print m.group()    print type(m.group())else:    print 'not found'





0 0
原创粉丝点击