python 正则表达式

正则表达式各个语言的语法都一样,但是支持程度可能不同,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-8

import re

pattern = 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-8

import re

Str = '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-8

import re

Str = '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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏天的技术博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值