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

python 基础学习 正则表达式1(规则)

时间:2015-06-02 18:13:29      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:python 正则

正则表达式:

*正则表示式(或RE)是一种小型的、高度专业化的编程语言,(在python中)它内嵌在python中,并通过re模块实现。

    -可以为想要匹配的相应字符串指定规则

    -该字符串集可能包含英文语句、e-mail地址、命令或任何你想要的东西

    -可以问诸如“这个字符串匹配该模式吗?”

    -“在这个字符串中是否有部分匹配该模式呢?”

    -你也可以使用re以各种方式来修改或分隔字符串

*正则表达式模式被编译成一系列的字节码,然后由用c编写的匹配引擎执行

*正则表达式语言相对小型和受限(功能有限)

    -并非所有字符串处理都能用正则表达式完成

*字符匹配

    -普通字符

        -大多数字母和字符一般都会和自身匹配

        -如正则表达式test会和字符串"test“完全匹配

    -元字符

        . ^ $ * + ? {} \ | ( )

=============================================================

.[]

    -常用来指定一个字符集:[abc];[a-z]

    -元字符在字符集中不起作用:【akm$】

    -补集匹配不在区间范围内的字符:【^5】

范例:

>>> import re
#在python中如果想使用正则表示式,需先导入re模块,re模块中有许多方法
#定义正则表达式其实就是定义一个字符串 :s = "abc" ,但这个没有任何意义
#通常定义表达式时要加一个r : s = r"abc" 来定义这个正则表达式的字符串
>>> s = r"abc"      #这个可以理解为规则
>>> re.findall(s,‘aaaaaaa‘)
[]
#re.findall方法将规则s比较字符串‘aaaaaaa‘,因为没有abc,所以返回为空
>>> re.findall(s,‘abcddabc‘)
[‘abc‘, ‘abc‘]
#最原始的匹配,通过普通字符匹配到自身
>>> st = "top tip tqp twp tep"
>>> s = r"top"
>>> re.findall(s,st)
[‘top‘]
>>> s = r"t[oe]p"
>>> re.findall(s,st)
[‘top‘, ‘tep‘]
#【制定一个字符集】 t开头,p结尾,中间是o或e中的一个
>>> s = r"t[^oe]p"
>>> re.findall(s,st)
[‘tip‘, ‘tqp‘, ‘twp‘]
【^匹配不在区间范围内的字符】,取反

.^

    -匹配行首。除非设置MULTILINE标志,它只是匹配字符串的开始,在MULTILINE模式里,它也可以直接匹配字符串中的每个换行。

>>> s = r‘hello‘
>>> b = ‘hello world,hello boy‘
>>> re.findall(s,b)
[‘hello‘, ‘hello‘]
>>> s = r‘^hello‘                   
>>> re.findall(s,b)
[‘hello‘]
>>> b = ‘ world,hello boy‘
>>> re.findall(s,b)
[]
【^表示行首】


.$

    -匹配行尾,行尾被定义为要么是字符串尾,要么是一个换行字符后面的任何位置。

>>> s = r‘boy$‘
>>> re.findall(s,b)
[‘boy‘]

#注意【】中出现元字符    元字符在字符集中不起作用

>>> t = r‘t[abc$]‘    #匹配以a 或b 或c 为结尾的字符串
>>> re.findall(t,‘ta‘)
[‘ta‘]
>>> re.findall(t,‘t$‘)
[‘t$‘]                         #未生效
>>> t = ‘t[^ab]‘
>>> re.findall(t,‘ab‘)
[]                               #取反
>>> r = ‘t[abc^]‘
>>> re.findall(r,‘t^‘)
[‘t^‘]

更多用法:匹配一个范围,写法[0-9]、[a-zA-Z]\[a-zA-Z0-9]

>>> s = r‘x[0123456789]x‘
>>> l = ‘x1x x22x xxx‘
>>> re.findall(s,l)
[‘x1x‘]
>>> s = r‘x[0-9]x‘
>>> re.findall(s,l)
[‘x1x‘]

.\转义字符

    -反斜杠后面可以加不同的字符以表示不同特殊意义

    -也可以用于取消所有的元字符:\[ 或\\

        \d 匹配任何十进制数: 相当于类[0-9]

        \D 匹配任何非数字字符:相当于类[^0-9]

        \s 匹配任何空白字符:它相当于类[\t\n\r\f\v]

        \S 配配任何非空白字符: 它相当于类[^\t\n\r\f\v]

        \w匹配任何字母数字字符:它相当于类[a-zA-Z0_9_]

        \W匹配任何字母数字字符:它相当于类[^a-zA-Z0_9_]

范例:

>>> s = r‘x\dx‘
>>> l = ‘x1x x22x xxx‘
>>> re.findall(s,l)
[‘x1x‘]
#如有多次重复可以使用{次数}
>>> r=r"010-\d\d\d\d\d\d\d\d"
>>> re.findall(r,‘010-87568745‘)
[‘010-87568745‘]
>>> r=r"010-\d{8}"
>>> re.findall(r,‘010-87568745‘)
[‘010-87568745‘]
>>> re.findall(r,‘010-8756874‘)
[]

.重复 {次数}

    -正则表达式第一功能是能够匹配不定长的字符集,另一个功能就是你可以指定正则表达式的一部分的重复次数

>>> import re
>>> s =r‘^010-\d{8}‘
>>> re.findall(s,‘010-36854625‘)
[‘010-36854625‘]

.*

    -指定前一个字符可以被匹配零次或更多次,而不是只有一次。匹配引擎会试着重复尽可能多的次数(不超过整数界定范围,20亿)

>>> a=r‘ab*‘
>>> re.findall(a,‘abbbbbb‘)
[‘abbbbbb‘]
>>> re.findall(a,‘a‘)
[‘a‘]

.+

    -表示匹配一次或更多次

    -注意*和+之间的不同;*零次到多次。+至少一次;

>>> a=r‘ab+‘
>>> re.findall(a,‘accccccccb‘)
[]
>>> re.findall(a,‘accccccccbab‘)
[‘ab‘]

.?

    -表示将前一个符号重复0次或1次

    #用于表示某事物是可选的。

>>> s=r‘^010-?\d{8}$‘
>>> re.findall(s,‘010-12345678‘)
[‘010-12345678‘]
>>> re.findall(s,‘01012345678‘)
[‘01012345678‘]
>>> re.findall(s,‘01012345678abc‘)
#此处同时需要注意$的使用

.+?

    -最小匹配模式

>>> s=r‘ab‘
>>> re.findall(s,‘abbbbababb‘)
[‘ab‘, ‘ab‘, ‘ab‘]

.{m,n}

    -其中m和n是十进制整数。该限定符的意思是至少有m个重复,至多到n次重复。

>>> s=r‘ab‘
>>> re.findall(b,‘abbbbbababb‘)
[‘abbb‘, ‘ab‘, ‘abb‘]

    -忽略m会认为下边界是0,而忽略n的结果将是上边界为无穷大(实际上是20亿)

    -{0,}等同于*,{1,}等同于+,而{0,1}则与?相同

>>> s=r‘ab{1,}‘
>>> d=r‘ab+‘
>>> re.findall(s,‘abbbbababb‘)
[‘abbbb‘, ‘ab‘, ‘abb‘]
>>> re.findall(d,‘abbbbababb‘)
[‘abbbb‘, ‘ab‘, ‘abb‘]


本文出自 “思想大于技术” 博客,谢绝转载!

python 基础学习 正则表达式1(规则)

标签:python 正则

原文地址:http://linuxboys.blog.51cto.com/9150052/1657525

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