Python连载笔记(八)——————正则语法

一、正则基本知识

为什么需要正则?
    1.文本处理已经成为计算机常见的工作之一
    2.对文本内容进行快速搜索定位,提取是比较繁琐和复杂的
    3.为了解决这个问题,产生正则表达式
        作用:
                可以称之为文本的高级匹配模式,提供搜索、替换、查找等功能,
            本质是由一系列特殊符号和字符组成的字符串
        特点:
            方便进行检索修改文本的操作
            支持多种编程语言
            使用起来比较灵活
        使用或设计正则表达式的原则:
            1)正确性:能够正确的匹配要求内容
            2)唯一性:除了需要的内容,尽可能减少不需要的内容
            3)全面性:对目标特征考虑全面,不遗漏咋们需要的内容

    Python 使用正则——————— re模块

二、正则相关函数

import re
"""
    re.findall(pattern,str)
    功能:使用正则表达式匹配字符串
    参数:
        pattern:正则表达式字符串
        str:目标字符串 或者 原字符串
    返回值:返回匹配到的内容
    
    元字符:
        在正则表达式中,有一定含义的特殊字符
"""
"""
1.匹配普通字符 比如 a b c & #
    匹配规则:匹配字符串本身


"""
#********************************************************************
str = "abcdefg"
L = re.findall("abc",str)
print(L)  #['abc','abc']
str1 = "山对面的朋友你好吗?"
L1 = re.findall("你好",str1)
print(L1)
#********************************************************************
"""
2.或 ————>元字符:|
    匹配规则:匹配 | 两边任意一个正则表达式
    注意: |  的两边不要有空格
"""
#********************************************************************
str3 = "abcdaasabacsdfabaf"
L2 = re.findall("ab|ba",str3)
print(L2)
#********************************************************************
"""
3.匹配单一字符 —————>元字符:.
    规则:匹配除了\n以外的任意一个字符
"""
#********************************************************************
str4 = "abc adc a@c abd"
L4 = re.findall("a.c",str4)
print(L4)
#********************************************************************
"""
4.匹配开始位置 —————>元字符:^
    规则:匹配一个字符串开头的位置
"""
#********************************************************************
str5 = "abc adc a@c bcd"
L5 = re.findall("^ab",str5)
L55 = re.findall("^cd",str5)
print(L5)
print(L55)
str5 = "hello python"
L5 = re.findall("^hello",str5)
print(L5)
#********************************************************************
"""
5.匹配结尾位置—————>元字符:$
    规则:匹配字符串结束的位置

"""
#********************************************************************
str6 = "abc adc a@c bcd"
L6 = re.findall("cd$",str6)
print(L6)
#********************************************************************
"""
6.匹配重复————>元字符:*
    规则:匹配前面的正则表达式重复  0次或者多次
"""
#********************************************************************
str7 = "abbbcabcdaccccdadddcaad"
L7 = re.findall("ab*",str7)
print(L7)
#********************************************************************
"""
7.匹配重复——————>元字符:+
    规则:匹配前面的正则表达式1次或者多次
"""
#********************************************************************
str8= "abbbcabcdaccccdadddcaad"
L8 = re.findall('ab+',str8)
print(L8)
#********************************************************************
"""
8.匹配重复————>元字符:?
    规则:匹配前面出现的字符 0次 或者 1次
"""
#********************************************************************
str9= "abbbcabcdaccccdadddcaad"
L9 = re.findall('ab?',str9)
print(L9)
#********************************************************************
"""
9.匹配重复————>元字符:{n}
    规则:匹配前面的正则出现n次
"""
#********************************************************************
str10= "abbbcabcdaccccdadddcaad"
L10 = re.findall('ab{3}',str10)
print(L10)
#********************************************************************
"""
10.匹配重复————>元字符:{m,n}
    规则:匹配前面正则出现m次到n次
"""
#********************************************************************
str11 = "abbbcabcdaccccdadddcaad"
L11 = re.findall('ab{1,3}',str11)
print(L11)
#********************************************************************
"""
11.匹配字符集————>元字符:[字符集]
        规则:匹配括号内任意一个字符
    比如:
        [abc123]        #匹配:a b c 1 2 3
        [a-z]           #匹配小写字母
        [A-Z]           #匹配大写字母
        [0-9]           #数字
        [0-9A-Za-z]     #匹配任意数字和字符

"""
#********************************************************************
str12 = "abbb ABABA 1133"
L12 = re.findall('[A-Z]',str12)
print(L12)
#********************************************************************
"""
12.匹配字符集 ————>元字符:[^...]
    规则:除了字符集中的任意一个字符
    [^abc] ————> def...
"""
#********************************************************************
str13 = "abbb ABABA 1133"
L13 = re.findall('[^abB]',str13)
print(L13)
#********************************************************************
"""
13.匹配任意(非)数字字符————>元字符:\d \D
    规则:
        \d匹配的是任意数字字符 相当于:[0-9]
        \D匹配任意非数字字符,相当于:[^0-9]
"""
#********************************************************************
str14 = "15827309203"
str141 = "18872126634"
L14 = re.findall('1[3,5,8,7]\d{9}',str14)
L141 = re.findall('1[8]\d{9}',str141)
L142 = re.findall('1[1]\d{9}',str141)
print(L14)
print(L141)
print(L142)
#********************************************************************
"""
14.匹配空(非空)字符串 ————> \s \S
    规则:
        \s:匹配任意空字符
        \S:匹配任意非空字符

"""
#********************************************************************
str15 = "hello python"
L15 = re.findall('\s+',str15)
L151 = re.findall('\S+',str15)
print(L15)
print(L151)
#********************************************************************
"""     
    判断以下哪几个是手机号:
        13811011234
        1da34923hh44
        87123444
        13ababdbddd
        135353534535353
        138110112341


"""
#********************************************************************
list = ["13811011234","1da34923hh44","1da34923hh44","13ababdbddd","135353534535353","138110112341"]
for i in list:
    L13 = re.findall('1[3,5,8,7]\d{9}$',i)
    if L13 != []:
        print(i,"是手机号!")
#********************************************************************
"""
    1.re.findall() 查找目标字符串
    
    2.re.split(pattern,str)
        功能:通过正则表达式,切割字符串
        参数:pattern:正则  str:元字符串 
        返回值:分割后的字符串列表
"""
#********************************************************************
str14 = "abbbbbcdsadsab"
L14 = re.split("b",str14)
print(L14)
##a|b||b||b||b||b|cdsadsa|b||
#********************************************************************
"""
    3.re.sub(pattern,replace,str)
        功能:替换正则匹配的内容
        参数:
            pattern:正则  replace:要替换的内容 str:目标字符串
        返回值:返回替换后的字符串
"""
#********************************************************************
str15 = "abcdef"
str151 = re.sub("a|b","9",str15)
print(str151)
#********************************************************************
"""
    4.re.match(pattern,str)
        功能:匹配目标字符串开头位置
        参数:pattern:正则    str:目标字符串
        返回值:匹配到的内容
"""
#********************************************************************
str16 = "hello 123"
L16 = re.match("(he)l(lo)",str16).group(0)
L163 = re.match("(he)l(lo)",str16).group(1)
L162 = re.match("(he)l(lo)",str16).group(2)
L161 = re.match("hello",str16).group(0)
print(L16)
print(L163)
print(L162)
print(L161)
#********************************************************************
"""
    5.re.search(pattern,str)
        功能:匹配目标字符串,只能匹配第一个
        参数:pattern:正则    str:目标字符串
        返回值:匹配到的内容
"""
#********************************************************************
str17 = "ababcdbaabsder"
L17 = re.findall("ab",str17)
print(L17)
L171 = re.search("ab",str17).group(0)
print(L171)
#********************************************************************
"""
    6.贪婪模式和非贪婪模式
        1)贪婪模式:
            正则表达式的重复,默认总是尽可能的向后 匹配内容
                * + ? {m,n}
        2)非贪婪模式:
            正则表达式的重复,尽可能少的向后匹配,能0次决定不1次,能1次绝不2次
                *? +? ?? {m,n}?
        注意:如果想把贪婪模式变换为非贪婪模式,需要在后面加一个"?"
"""
"""
	7.在正泽表达式中加()表示输出()里面匹配到的值
    8.join:
        格式:
            str1.join(可迭代对象)
            str1:是作为凭借的字符
"""
#*******************************************************************************
str3 = "a1b2c3d4"
L3 = re.findall("\d",str3)
L31 = "".join(L3)
print(L31)
#*******************************************************************************
str4 = input("请输入一个字符串:")
L4 = re.findall("[A-Za-z]",str4)
L41 = "".join(L4)
print(L41)
#*******************************************************************************
str5 = "a1b2c3d4"
L5 = re.findall("[A-Za-z]",str5)
L51 = "".join(L5)
print(L51)

三、正则训练题

"""
    1.匹配出文字的阅读次数:"阅读次数为 9999"
    2.找出各个编程语言的阅读次数: "python = 9999,c = 7890, c++ = 12345"
    3.将Python的阅读次数加10 : "python = 997"
    4切割字符"info:xiaozhang 33 shandong" 以:或者| 切割
"""
#********************************************************************
str1 = "阅读次数为 9999"
L1 = re.findall("[0-9]+",str1)
print(L1)
#********************************************************************
str2 = "python = 9999,c = 7890, c++ = 12345"
L2 = re.findall("[^=, ,0-9]+",str2)
L21 = re.findall("[0-9]+",str2)
print(L2)
print(L21)
#********************************************************************
str3 = "python = 997"
L3 = re.sub("\d+","1007",str3)
print(L3)
#********************************************************************
str4 = "info:xiaozhang 33 shandong"
L4 = re.split(":| ",str4)
print(L4)
"""
    1.从键盘输入十个字符,判断是否有五个连续的数字
    2.找出一个字符串中的五个连续数字,随后必须是非数字
    3.把a1b2c3d4取数字内容拼接成一个字符串.
    4.找出从键盘输入的字符串的所有字母
    5.将a1b2c3d4字符内容拼接成一个字符串
"""
import re
#*******************************************************************************
str1 = input("请输入十个字符:")
for i in [0,1,2,3,4,5]:
    if re.findall('\S+[0][1][2][3][4]\S+',str1) != []:
        print("存在五个连续数字:01234")
    elif re.findall('\S+[1][2][3][4][5]\S+',str1) != []:
        print("存在五个连续数字:12345")
    elif re.findall('\S+[2][3][4][5][6]\S+',str1) != []:
        print("存在五个连续数字:23456")
    elif re.findall('\S+[3][4][5][6][7]\S+',str1) != []:
        print("存在五个连续数字:34567")
    elif re.findall('\S+[4][5][6][7][8]\S+',str1) != []:
        print("存在五个连续数字:45678")
    elif re.findall('\S+[5][6][7][8][9]\S+',str1) != []:
        print("存在五个连续数字:56789")
else:
    print("不存在五个连续数字:")
#*******************************************************************************
str2 = input("请输入一串字符:")
L2 = re.findall("\D{1}(\d{5})\D{1}",str2)
print("这五个数字为:%s"%L2)
#*******************************************************************************
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值