python 正则表达式

正则表达式(re=regular expression)
通配符
1. .表示当前目录
2. ..表示目录的上级目录
3. *表示0个或者多个字符
4. ?一个任意字符
5. [[:digit:]] 表示匹配数字
6. [[:space:]] 表示匹配空格
特殊的符号
一个完整的正则使用过程
#!/usr/bin/env python
# coding:utf-8
import re
a = re.match(r"westos","westoshi")
print a.group()
#match 是从左往右依次匹配的

print a



#如果没有找到匹配的则返回值为None
print re.match(r"hello","westoshello")




\d 表示单个数字
\D为\d的取反,表示除了数字之外
#!/usr/bin/env python
# coding:utf-8
import re
a = re.match(r"\d","6")
print a.group()
b = re.match(r"\D","g6")
print b.group()


\s 表示匹配空格
\S,\s的取反,表示除了空格之外
#!/usr/bin/env python
# coding:utf-8
import re
a = re.match(r"\s"," 11")
print a.group()
b = re.match(r"\S","a11")

print b.group()

\w 表示匹配字母,数字或者下划线


#!/usr/bin/env python
# coding:utf-8
import re
a = re.match(r"\w","a11")
print a.group()
b = re.match(r"\w","_11")
print b.group()
c = re.match(r"\w","12")
print c.group()


表示数量
*  匹配前的一个字符出现0次或者无限次,即可有可无
+  匹配前的一个字符出现1次或者无限次,即至少出现一次
? 匹配前的一个字符出现1次或者0次
{m} 匹配前的字符出现m次
{m,} 匹配前的字符至少出现m次
{m,n} 匹配前的字符出现m次到n次
#!/usr/bin/env python
# coding:utf-8
import re
a = re.match(r"a*","hilele")
print a.group()

#!/usr/bin/env python
# coding:utf-8
import re
a = re.match(r"a+","aaaahilele")
print a.group()



应用一:匹配电话号码
#!/usr/bin/env python
# coding:utf-8
import re
reg = r"010-?\d{8}$"  #正则规则,以010开头,-可有可无,010后为八个数字
phones = ["101-12345678","01012345678","010123456789"]
for i in phones:
        a = re.match(reg,i)
        if a:
                print "%s 合法" %(i)
        else:
                print "%s 不合法" %(i)



应用2:匹配字符串
匹配出的字符串第一个字母为大写,后面为小写字母,且可有可无
#!/usr/bin/env python
# coding:utf-8
import re
reg = r"[A-Z][a-z]?"  
s = ["Hi","A","huba"]
for i in s:
        a = re.match(reg,i)
        if a:
                print "%s 合法" %(i)
        else:
                print "%s 不合法" %(i)



表示边界
1.^表示以啥开头
2.$表示以啥结尾


应用三:匹配QQ邮箱
1.找出列表中符合条件的邮箱地址,并储存到/tmp/mail.txt文件中
2.QQ邮箱地址以@qq.com结尾
3.@qq.com前内容以下划线,字母或者数字结尾,至少4位最多20位
#!/usr/bin/env python
# coding:utf-8
import re
reg = r"\w{4,20}.@qq.com$"
s = ["bb@qq.com","a@qq.com","_huba@qq.com","_1aaa@qq.com"]
for i in s:
        a = re.match(reg,i)
        if a:
                print "%s 合法" %(i)
                with open("/tmp/mail.txt",'a+') as f:
                        f.write(i+"\n")
        else:
                print "%s 不合法" %(i)



表示分组
1.|表示匹配|左右任意一个表达式即可
2.(ad) 表示将括号中的字符作为一个分组
3.\num 表示引用分组的第num 个匹配道德字符串
4.(?P) 分组起别名
5.(?P=name) 引用分组的别名
应用4:匹配出0-100之间的数字,包括1和100
#!/usr/bin/env python
# coding:utf-8
import re
reg = r"^0$|^100$|[1-9]\d?$"
a = re.match(reg,"100")
print a.group()


groups以元组的方式返回符和条件的分组


#!/usr/bin/env python
# coding:utf-8
import re
s = "http://www.westos.org/hrdao/book/hru/lihu"
reg = r"http://.+/(?P<first_connect>\w+)/(?P<second_connect>\w+)"
a = re.match(reg,s)
print a.group()
print a.groups()
print a.groupdict()



re 的高级用法
1.search()方法:只找到符合条件的第一个并返回
2.findall()方法:返回符合条件的所有内容(列表方式)
3.sub()方法:对符合正则的内容进行替换
4.spilt()方法:制定多个分隔符进行分隔



python贪婪和非贪婪


1.非贪婪模式,总是匹配尽可能少的字符
2.*,?,+,{m,n}后面加上?,使得贪婪模式变成非贪婪模式


#!/usr/bin/env python
#  coding:utf-8
import re
s ="日历 111-4-24-23"
reg = r".+(\d+-\d+-\d+-\d)"  #默认情况下为贪婪模式
a = re.search(reg,s)
print a.group(1)


非贪婪模式:





JSON


#!/usr/bin/env python
#  coding:utf-8
import json
dic = {
        "service":"ftp",
        "port":"22",
        "service":"http",
        "port":"80"
}
in_json = json.dumps(dic,indent = 4)
print in_json
print type(in_json)
out_json = json.loads(in_json)
print out_json

print type(out_json)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值