python startswith正则表达式_Python

【前言】

正则表达式(RE)是一种小型的、高度专业化的编程语言,python已经内嵌了正则表达式,并通过RE模块调用实现。

工作原理:通过一些特定的字符去匹配你想要的内容,将与设定规则匹配的内容返回,不匹配的内容过滤,即不返回。

本篇主要讲正则表达式RE中的元字符功能及使用,下篇再讲其RE模块中,常用的一些内置方法。

在RE中大致分为"普通字符"和"元字符"两种:

普通字符 : 顾名思义,就是普通使用的一些字符,没有任何特殊意义的。

元字符: 是RE中用于定义过滤内容的一些规则字符,是有特殊的含义和功能的。类似程序的 " \t ",表示是一个制表符。

- 普通字符

例如: test 与 'test' 匹配

- 元字符

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

定义正则表达式:

正则对象名 = r ' 正则内容 '

演示实例:

rule = r'test'

解释:定义一个名为rule的正则,其功能是在所有内容中匹配 ' test ' 这个字符串。

下面开始讲解 正则表达式的元字符:

[ ] 字符集

-常用于匹配某一个字符集:如 [a-z] ; [A-Z] ; [0-9] ...

-元字符在字符集中不起作用,只相当于普通字符:如[ abc$ ] ; [ hello* ]...

- 扩展:匹配字符集以外的字符(补集匹配):[^abc]... 特点:以^符号开头

实例如下

#!/usr/bin/python

# -*- coding: utf-8 -*-

import re

r = r'[a-c]test' #制定一个首位字符为'a-c'区间的正则

print( re.findall(r,'atest') )

print( re.findall(r,'ctest') )

print( re.findall(r,'dtest') )

运行输出:

['atest']

['ctest']

[]

可见,以d开头的字符串‘dtest’被过滤掉了。

补集匹配

补集匹配需要配合 字符集[ ] 来使用,当使用字符集[ ]时,其内部的首位为 ^ 时,表示除了字符集以内的所有内容:

实例如下:

#!/usr/bin/python

# -*- coding: utf-8 -*-

import re

r = r'[^xy]' # 除 x y 以外的字符

print( re.findall(r,'x') )

print( re.findall(r,'xy') )

print( re.findall(r,'xyabc') )

print( re.findall(r,'xiyjk') )

实例输出:

[]

[]

['a', 'b', 'c']

['i', 'j', 'k']

解释: 定义补集正则,此时除了 x y 以外的内容,其它内容都进行输出,与其位置无关。

^ 匹配行首

主要用于匹配字符串的头部(开始)的字符,匹配则输出,不匹配则过滤掉。

实例如下:

#!/usr/bin/python

# -*- coding: utf-8 -*-

import re

r = r'^head' # 输出以‘ head ’开始的字符串

print( re.findall(r,'head') )

print( re.findall(r,'headfile') )

print( re.findall(r,'heartkkk') )

print( re.findall(r,'heaaaabb') )

实例输出:

['head']

['head']

[]

[]

解释:匹配头部为 head 的字符串,有则输出该头部信息,没有则不输出,可见后两个字符串被过滤掉了。

$ 匹配行尾

主要用于匹配字符串的尾部(末端)的字符,匹配则输出,不匹配则过滤掉。

实例如下:

#!/usr/bin/python

# -*- coding: utf-8 -*-

import re

r = r'end$' # 制定以'end' 结尾的字符串

print( re.findall(r,'end') )

print( re.findall(r,'abcend') )

print( re.findall(r,'iiienn') )

print( re.findall(r,'hello python') )

实例输出:

['end']

['end']

[]

[]

\ 转义字符

正则表达式中与其它语言一样,使用反斜杠‘ \ ’进行字符转义,其内部也提供了一些常用的转义字符。

同时可以使用 \ 字符取消所有的元字符,如: \$ , \* ,\+ …...

内部转义字符:

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

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

\s : 匹配任何空白字符(如制表符/换行等): 相当于字符集 [\t\n\r\f\v]

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

\w: 匹配任何字母数字及下划线字符: 相当于字符集 [a-aA-Z0-9_]

\W : 匹配任何非字母数字及下划线字符: 相当于字符集 [^a-aA-Z0-9_]

\A : 匹配起始的字符串 用法: r = r'\A匹配的字符'

\Z : 匹配结束字符串(换行结束符无效) 用法: r = r'匹配字符串\Z'

实例如下:

功能:将元字符 $ 转换为普通字符

#!/usr/bin/python

# -*- coding: utf-8 -*-

import re

r = r'\$abc' # 将'$'元字符转义为普通字符

print( re.findall(r,'abc') )

print( re.findall(r,'$abc') )

运行输出:

[]

['$abc']

内部提供转义字符实例:

#!/usr/bin/python

# -*- coding: utf-8 -*-

import re

r = r'\dyear' # 用 \d 代替 [0-9]

print( re.findall(r,'2year') )

print( re.findall(r,'dyear') )

运行输出:

['2year']

[]

* 匹配0次或以上

用于指定前一个字符可以被匹配 零次或 以上次数,匹配引擎会本着重复尽可能多次数去匹配,一般配合 字符集[]使用。

例如: a[xyz]*b

表示:匹配以'a'开始,‘b’结束,中间是'x''y''z'字符中的任意字符、任意组合及任意次数的组合的字符。

实例如下:

#!/usr/bin/python

# -*- coding: utf-8 -*-

import re

r = r'hello*' # 用 * 号制定 o 必须出现 零次或以上

print( re.findall(r,'hel') )

print( re.findall(r,'hell') )

print( re.findall(r,'hello') )

print( re.findall(r,'helloo') )

运行输出:

[]

['hell']

['hello']

['helloo']

+ 匹配1次或以上

用于指定前一个字符可以被匹配 一次或 以上次数,与*字符不一样的就是 + 字符必须需要指定的字符必须出现一次,而 * 字符可以是 0次。

实例如下:

#!/usr/bin/python

# -*- coding: utf-8 -*-

import re

r = r'hello+' # 用 + 号制定 o 必须出现 一次或以上

print( re.findall(r,'hell') )

print( re.findall(r,'hello') )

print( re.findall(r,'helloo') )

运行输出:

[]

['hello']

['helloo']

? 可选匹配

指定某一字符或区间字符,在匹配时可出现一次或零次,即可有可无的状态。

实例如下:

#!/usr/bin/python

# -*- coding: utf-8 -*-

import re

r = r'ab?c' # 指定 b 可有可无

print( re.findall(r,'ac') )

print( re.findall(r,'abc') )

print( re.findall(r,'abbc') )

运行输出:

['ac']

['abc']

[]

拓展延伸:

贪婪模式和非贪婪模式,贪婪模式为最大匹配,非贪婪模式则为最小匹配!

实例如下:

#!/usr/bin/python

# -*- coding: utf-8 -*-

import re

r = r'ab*' # 贪婪模式(最大匹配)

s = r'ab*?' # 非贪婪模式(最小匹配)

print( re.findall(r,'abbbbbb') )

print( re.findall(s,'abbbbbb') )

运行输出:

['abbbbbb']

['a']

{m,n} 区间限定符

表示将某一字符限定在某一区间内,该限定符的规则为至少重复 m 次,最多重复 n 次。其中m,n均为整数。

当忽略m 时,默认下边界(至少)为 0 , 而忽略 n 时,默认上边界(至多)为无穷(0~20亿次)。

实例如下:

#!/usr/bin/python

# -*- coding: utf-8 -*-

import re

r = r'ab{2,5}c' # 指定 b 重复次数在 2~5 次之间

print( re.findall(r,'abc') ) # 重复 1 次

print( re.findall(r,'abbc') ) # 重复 2 次

print( re.findall(r,'abbbbbc') ) # 重复 5 次

print( re.findall(r,'abbbbbbc') ) # 重复 6 次

运行输出:

[]

['abbc']

['abbbbbc']

[]

喜欢 (0)or分享 (0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值