Python——正则表达式

正则表达式(re=regular expression)
通配符
. 当前目录
.. 当前目录的上一级目录
* 0个或多个字符
? 一个任意字符
[[:digit:]]
[[:space:]]

特殊的符号
一个完整的正则使用过程

match 方法是从左往右依次匹配的
如果没有找到匹配, 则返回 None

import re
a = re.match(r"westos", "westoshello")
print a.group()

a = re.match(r"westos", "hellowestoshello")
print a

这里写图片描述

\d 单个数字
\D \d的取反 , 除了数字之外import re

a = re.match(r"\d", "1")
a.group()
print a.group()
a = re.match(r'\d', "w11")
print a
a = re.match(r"\D", "w11")
print a

这里写图片描述

\s 匹配空格, \n, \t,\r

import re
a = re.match(r"\s", "\tw11")
print a
a = re.match(r"\S", "aa\tw11")
print a

这里写图片描述

\w(word): 匹配字母, 数字或者下划线

import re
a = re.match(r"\w", "wessstos")
print a
a = re.match(r"\w", "122wessstos")
print a
a = re.match(r"\w", "__wessstos")
print a

这里写图片描述

表示数量
* 匹配前一个字符出现0次或无限次, 即可有可无, {0,}
+ 匹配前一个字符出现1次或无限次,即至少出现一次, {1,}
? 匹配前一个字符出现1次或0次,即前面的字符可省略, {0,1}
{m} 匹配前一个字符出现m次
{m,} 匹配前一个字符至少出现m次
{m,n} 匹配前一个字符出现m次到n次

表示边界
^ : 以什么开头
$ : 以什么结尾

应用: 匹配电话号

import re
ree = r"1\d{2}-*\d{4}-*\d{4}$"

ii = ["13187279372", "172883722111", "132-2232-3345", "13348o039l2"]
for i in ii:
    a = re.match(ree, i)
    if a:
        print "%s合法" %(i)
    else:
        print "%s不合法" %(i)

这里写图片描述

表示分组
| : 匹配| 左右任意一个表达式即可;
(ab): 将括号中的字符作为一个分组
\num: 引用分组第num个匹配到的字符串
(?P): 分组起别名
(?P=name) : 引用分组的别名

应用: 匹配出0-100之间的数字, 包括0和100

import re
reg = r"^0$|^100$|[1-9]\d?$"
while 1:
    i = raw_input("请输入0-100之间的数字:")
    if re.match(reg, i):
        print "%s正确" %(i)
    else:
        print "%s不正确" %(i)

这里写图片描述
groups以元组方式返回符和条件的分组

import re
mailList =["aa@qq.com", "westos@qq.com", "12fg5@westos.com", "aa@qq.com"
"1westos@qq.com", "1f2fg5@qq.com"]
def mail_user_name(mail_name):
    reg = r"(\w{4,20})@(qq.com)$"
    a = re.match(reg, mail_name)
    print a.groups()
    return a.group()
print mail_user_name("westos@qq.com")

这里写图片描述

re高级用法
search()方法: 只找到符和条件的第一个并返回;

import re
s = "阅读次数为1000, 转发次数为100"
reg = r"\d+"
a = re.search(reg, s)
print a.group()

这里写图片描述
findall()方法: 返回符合条件的所有内容;

import re
s = "阅读次数为1000, 转发次数为100"
reg = r"\d+"
print  re.findall(reg, s)

这里写图片描述
sub()方法: 对符合正则的内容进行替换;

import re
s = "阅读次数为1000, 转发次数为100"
reg = r"\d+"
print re.sub(reg, '0' , s)

这里写图片描述
split()方法: 指定多个分隔符进行分割;

import re
s = "van 22:112233"
print re.split(r":| ", s)

这里写图片描述

python贪婪和非贪婪
非贪婪模式, 总是匹配尽可能少的字符;
*, ?,+, {m,n}后面加上?, 使得贪婪模式编程非贪婪模式;

import re
s = "This is a number 111-234-22-456"
r = re.match(r".+(\d+-\d+-\d+-\d+)", s)
print r.group(1)
默认情况下 python 正则是贪婪模式的;

r = re.match(r".+?(\d+-\d+-\d+-\d+)", s)
print r.group(1)

这里写图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值