python正则表达式-2day

#day-2
'''
author:hello-python
date:2019.1.15
goal:正则表达式
'''
import re
line01 = 'hellopython'

def regtest(reg_str,line = line01):
    test = re.match(reg_str, line)
    if test:
       print(test.group(1))
    else:
       print("匹配失败!")
# + :表示前面的字符,至少出现一次
reg_str04 = '.*(h.+l).*'  # (b.+b)表示b与b之间至少有一个字符
regtest(reg_str04)      # result : bcxb

#{n} ;控制前面字符出现次数
#a{2}:表示a出现次数
#b{3,4} :表示b至少出现3次最多出现4次
#c{4,}:表示c至少出现4次
reg_str05 = '.*(b.{2}b).*' #(b.{2}b) 表示匹配到b与b之间,只有两个字符;
reg_str06 = '.*(b.{3,4}b).*' #(b.{3,4}b) 表示b与b之间匹配到3到4个字符;
reg_str07 = '.*(b.{4,}b).*' #(b.{4,}b) 表示b与b之间至少4个字符;

# | :表示 或
#(abc|123) : 表示匹配到abc或者123,都算匹配成功
reg_str08='.*(hel|abc)'
reg_str09='.*(abc|hel)'

#[]:表示 里面包含的内容都可以进行匹配,包含内容只有表面字符含义
#[abcd]:表示 只要这个字符为a/b/c/d中的一个都可以匹配成功
#[0-9] :表示 只要这个字符在0-9 区间内,都可以匹配成功
#[^x]:表示匹配 字符不为x
line02='电话:17629261608'
reg_str10='.*(1[76][0-9]{9}).*' 
reg_str11='.*(1[76][^1]{9}).*'
regtest(reg_str10,line02)   # result :17629261608
regtest(reg_str11,line02)   # result : 匹配失败!

# \s 表示匹配空格,匹配一次
# \S 表示匹配不是空格的字符,匹配一次
#\w 表示匹配 A-Z、0-9、_ 中的容易字符,匹配一次
#\W与\w 相反
#\d 表示数字
# [\u4E00-\u9FA5] : 表示所有汉字,unicode 编码

def regtest_test(reg_str,line=line01):
    test = re.match(reg_str,line)
    if test:
        print(test.group(1)+':' +test.group(2)+ '-'+test.group(3)+ '-'+test.group(4))
    else:
        print("匹配失败~!")

#简单实例:
str01 = '小王出生于2000年2月2日'
str02 = '小刘出生于2001-01-20'
str03 = '小娟出生于1999/9/9'
str04 = '小敏出生于1998.8.5'
str = [str01,str02,str03,str04]
#提取出姓名+出生日期
#匹配模式
reg_str12 = '(.*)出生于(\d{4})[.年/-](\d{1,2})[.月/-](\d{1,2}).*?'
for i in range(4):
    regtest_test(reg_str12,str[i])

    执行结果
小王:2000-2-2
小刘:2001-01-20
小娟:1999-9-9
小敏:1998-8-5

猜你喜欢

转载自blog.51cto.com/2367685/2347557