您的位置:首页 > 编程语言 > Python开发

python 正则表达式

2018-01-14 18:46 204 查看
正则表达式(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

a2be
#  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)



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: