python正则表达式

字符  作用

[m1m2……mn]  表示一个字符集合(m1、m2……mn等均为单个字符),表示可以与集合中的任意一个字符匹配

[^m1m2……mn] 表示可以与集合之外的任意一个字符匹配

[m-n]   表示一个字符范围集合,表示可以与字符m到n之间的所有字符匹配

[^m-n]  表示可以与集合范围之外的任意一个字符匹配

\d  用来匹配一个数字字符,相当于“[0-9]”

\D  用来匹配一个非数字字符,相当于“[^0-9]”

\w  用来匹配一个单词字符(包括数字、大小写字母和下画线),相当于“[A-Za-z0-9_]”

\W  用来匹配任意一个非单词字符,相当于“[^A-Za-z0-9_]”

\s  用来匹配一个不可见字符(包括空格、制表符、换行符等)

\S  用来匹配一个可见字符

.   用来匹配除了换行符外的任意一个字符

【例】

>>> import re

>>> str='''<span class="td td-2nd"><a href="/air/nanchang.html" target="_blank">南昌市</a></span><span class="td td-4rd">17</span><span class="td td-4rd"><em class="f1" style="color:#79b800">优</em></span>'''

则:

>>> re.findall(r"\d\d",str)

['17', '79', '80']         #匹配出str中只含2个数字的字符串

>>> re.findall(r"[6789]\d",str)

#匹配出str中只含2个数字的字符串,且第一个数字符号可以是6或7或8或9

['79', '80']  

>>> re.findall(r"td.",str)

#匹配出 str中以td开头,第三个字符不是换行符的连续三个字符    

['td ', 'td-', 'td ', 'td-', 'td ', 'td-']

>>>s = 'aaa,bbb ccc high'        #定义字符串

>>> re.findall(r'[a-zA-Z]+',s)

['aaa', 'bbb', 'ccc', 'high']       #实现了分词效果


 

正则表达式元字符介绍:

字符  作用

*   用来匹配前面的字符任意多次(0到多次)

+   用来匹配前面的字符一次或多次

?   用来匹配前面的字符零次或一次

{n} 用来匹配前面的字符n次,n是一个非负整数

{n,}    用来匹配前面的字符至少n次,n是一个非负整数

{n,m}   用来匹配前面的字符串至少n次,至多m次,m和n为非负整数且n≤m

*?,+?,

??,{}?  ?跟在前面所述的任何一个数量限定符后面时,表示匹配模式是非贪婪的,

即尽可能少地匹配字符串。而默认情况下,匹配是贪婪的,即尽可能多地匹配所搜索的字符串。

【例】

>>> import re

>>> str='''<span class="td td-2nd"><a href="/air/nanchang.html" target="_blank">南昌市</a></span><span class="td td-4rd">17</span><span class="td td-4rd"><em class="f1" style="color:#79b800">优</em></span>'''

则:

# re.findall(r"\d{2,}",str)等价于re.findall(r"\d\d",str), re.findall(r"\d\d\d…",str)

>>> re.findall(r"\d{2,}",str)

['17', '79', '800']    #匹配出str中至少含2个数字的字符串

>>> re.findall(r"\d{1,}b\d{1,}",str)

['79b800']        #匹配出str中数字串中包含一个字母b的字符串

>>> s="fdfd<a>aaaaa</a>dfefe<b>bbbb</b>"

>>>regex = '<.*?>.*?<\/.*?>'

>>> re.findall(regex,s)

['<a>aaaaa</a>', '<b>bbbb</b>']    #从字符串中分离出标签对

4、字符定位元字符

字符  作用

^   用来匹配输入字符串是否以。。。。开始。

$   用来匹配输入字符串是否以。。。。结束。

\b  用来匹配一个单词边界(即单词和空格之间的位置)。事实上,所谓单词边界不是一个字符,而只是一个位置。

\B  用来匹配一个非单词边界。

【例】

>>> import re

>>> str='''<span class="td td-2nd"><a href="/air/nanchang.html" target="_blank">南昌市</a></span><span class="td td-4rd">17</span><span class="td td-4rd"><em class="f1" style="color:#79b800">优</em></span>'''

则:

>>> re.findall(r"td",str)

['td', 'td', 'td', 'td', 'td', 'td']

>>> re.findall(r"^td",str)    #判断str是以td开头,进行匹配

[]


 

字符  作用

\   元字符在符号在正则表达式中与特殊的含义,

如果想要匹配元字符,可以采用转义的方式。如:\\ ,\*, \.等

如果把元字符放在[]中,就不需要采用转义方式

【例】

>>> import re

>>> str='''<span class="td td-2nd"><a href="/air/nanchang.html" target="_blank">南昌市</a></span><span class="td td-4rd">17</span><span class="td td-4rd"><em class="f1" style="color:#79b800">优</em></span>'''

则:

>>> re.findall(r"\".*?\"",str)

#匹配出str中所有" "之间的字符串

['"td td-2nd"', '"/air/nanchang.html"', '"_blank"', '"td td-4rd"', '"td td-4rd"', '"f1"', '"color:#79b800"']

>>> re.findall(r'["].*?["]',str)

['"td td-2nd"', '"/air/nanchang.html"', '"_blank"', '"td td-4rd"', '"td td-4rd"', '"f1"', '"color:#79b800"']

#通过结果可以看出,如果把元字符放在[]中,就不需要采用转义方式。

正则表达式的常用函数介绍

re.compile(pattern, flags=0)    匹配任何可选的标记来编译正则表达式的模式,然后返回一个正则表达式对象

re.search(pattern,string, flags=0)  使用可选标记搜索字符串中第一次匹配正则表达式的对象。如果匹配成功,则返回匹配对象,否则返回None

re.match(pattern, string, flags=0) 

    使用带有可选标记的正则表达式的模式来匹配字符串,匹配是从字符串的第一个字符开始进行。如果匹配成功,返回匹配对象,否则返回None

re.findall(pattern, string, flags=0)

    查找字符串中所有匹配的子字符串,并返回一个字符串匹配列表

匹配对象.group(num = 0) 返回整个匹配对象,或者编号为num的特定子组

例如:下面的正则表达式定义从s中匹配出ip地址的内容。

>>> import re

>>>  s="ipddress192.168.10.1else"

>>>m1=re.search(r"(([01]{0,1}\d{0,1}\d|25[0-5])\.){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])",s)

>>> print(m1.group())

#输出

192.168.10.1

>>> str='''<span class="td td-2nd"><a href="/air/nanchang.html" target="_blank">南昌市</a></span><span class="td td-4rd">17</span><span class="td td-4rd"><em class="f1" style="color:#79b800">优</em></span><span class="td td-2nd"><a href="/air/nanchang.html" target="_blank">武汉市</a></span><span class="td td-4rd">17</span><span class="td td-4rd"><em class="f1" style="color:#79b800">优</em></span>'''

>>> re.findall(r"\"_blank\">(.{1,}?)</a>",str)

#匹配出所有的城市名

['南昌市', '武汉市']

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值