python的正则表达式用法

版权声明:禁止转载 https://blog.csdn.net/momow26/article/details/79955752
  • 正则表达式是一种工具,它定义了字符串的匹配模式.
  • 检查一个字符串是否跟某种模式匹配的部分或者从一个字符串中将与模式匹配的部分提取出来或者替换。
  • 1 正则表达式预热
def is_valid_username(username):
    """
    判断用户名是否有效,有效,返回True,无效返回False,
    用户名必须由字母、数字、下划线组成,且长度为6-20个字符
    """
    if 6 <= len(username) <= 20:
        for ch in username:
            if not ('0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' or ch == '_'):
                return False
        return True
    return False


def main():
    print(is_valid_username('admin'))
    print(is_valid_username('_andmin_'))
    print(is_valid_username('momowang'))
    print(is_valid_username('jhdsjgshdgfewhegjfsfsdf'))
    print(is_valid_username('5454dfd*fdsncxj'))


if __name__ == '__main__':
    main()
  • 2 正则表达式 — 是一种工具 - 定义字符串的匹配模式
场景-1
"""
判断用户名是否有效,有效,返回True,无效返回False,
用户名必须由字母、数字、下划线组成,且长度为6-20个字符
"""
# re - Regular Expression
import re


def main():
    username = 'momowang'
    # search 从任意位置开始匹配, 匹配完成的字符串,用^$,开始和结尾
    # match - 从第一个字符开始匹配
    m = re.match(r'\w{6,20}',username) 
    # 前面需要加r---原始字符串username -- 返回匹配对象
    if m:
        print(m)
        # m.span()  那个部分匹配成功, 得到匹配的范围
        print(m.span())
        print(m.group()) # 取出匹配合适的部分


if __name__ == '__main__':
    main()

场景-2

import re


def main():
    username = 'momowang!@#$%' 
    # 可以匹配成功,因为从开始匹配,成功后就不再考虑后面的内容了
    m = re.match(r'\w{6,20}', username)
    if m:
        print(m)
        # m.span()  那个部分匹配成功, 得到匹配的范围
        print(m.span())
        print(m.group()) # 取出匹配合适的部分


if __name__ == '__main__':
    main()

场景-3

import re


def main():
    username = '!@#$%momowang!@#$%'  
    # 不能匹配成功,因为不是以字母、数字和下划线开始的
    m = re. match(r'\w{6,20}', username)
    if m:
        print(m)
        # m.span()  那个部分匹配成功, 得到匹配的范围
        print(m.span())
        print(m.group()) # 取出匹配合适的部分


if __name__ == '__main__':
    main()

场景-4

import re


def main():
    username = 'momowang'
    # m = re.match(r'^\w{6,20}$', username) # match匹配成功返回内容,匹配不成功,返回None,^字符串的开始,$字符串结束
    m = re.match(r'^[0-9a-zA-Z_]{6,20}$', username)
    if m:
        print(m)
        # m.span()  那个部分匹配成功, 得到匹配的范围
        print(m.span())
        print(m.group()) # 取出匹配合适的部分


if __name__ == '__main__':
    main()

场景-5

import re


def main():
    username = 'momowang'
    # 如果一个正则表达式创建了之后,需要反复的利用,应该换如下的写法,效果与上面相同,且性能会更好
    pattern1 = re.compile(r'^[0-9a-zA-Z_]{6,20}$')
    m = pattern1.match(username)
    if m:
        print(m)
        # m.span()  那个部分匹配成功, 得到匹配的范围
        print(m.span())
        print(m.group()) # 取出匹配合适的部分


if __name__ == '__main__':
    main()
  • 3 判断QQ号是否为5-11位数字
    判断QQ号 ,0不能开头,开头的为1-9,后面是任意的数字,最多为12个数字。
    最少为5位,[1-9] - 1-9的数字,只能取任意一个 {4,11} 中间不能加空格
    [1-9]\d{4,11}
import re


def main():
    qq = input('请输入qq号:')
    m = re.match(r'^[1-9]\d{4,11}$', qq)
    if not m:  #逻辑取反
        print('请输入有效的QQ号.')
    else:
        print('输入的QQ号正确,请继续')


if __name__ == '__main__':
    main()
  • 4 生成随机验证码
"""设计一个函数,产生随机的验证码,由大小写字母、数字组成,
调一次给一个随机验证码"""
import random


def generate_code(code_len=4):
    """
    生成指定长度的验证码
    :param code_len: 验证码的长度
    :return: 由大小写、英文字母和数字构成的随机验证码
    """
    all_chars = '1234567890poiuytrewqasdfghjklmnbvcxzQWERTYUIOPLKJHGFDSAZXCVBNM'
    # chars_len = len(all_chars) 与下面#匹配用
    last_pos = len(all_chars) - 1
    code = ''
    for _ in range(code_len):
        index = random.randint(1, last_pos)
        # index = random.randint(0, chars_len - 1)
        code += all_chars[index]
    return code


def main():
    for _ in range(10):  # 调用10次
        print(generate_code(4))


if __name__ == '__main__':
    main()
  • 5 sub的使用
import re


# sub - substitute - 替换
#匹配到的话,替换匹配到的东西
def main():
    #sentence1 = '某?东你个煞笔我草你大妈二姑三姨妈四舅妈,日你姥姥的,Fuck your Milk妹'
    # |---表示分支
    #pure_sent = re.sub('[草操屮日]|某?东|煞笔|fuck|shit', '*', sentence1, flags=re.IGNORECASE)
    # pure -- 过滤之后的句子  flags= 正则表达式的匹配标记---忽略大小写  flags=re.IGNORECASE 或者flags=re.I
    #print(pure_sent)


    # split 拆分  '\s ---'表示匹配任意空白字符
    sentence2 = 'You go your way, I will go mine!'
    mylist = re.split(r'[ ,!]', sentence2)
    print(mylist)


if __name__ == '__main__':
    main()
  • 6 贪婪与懒惰匹配
import re


def main():
    # 贪婪匹配 - a.*b
    sentence1 = 'aabacddfbabajdfjskdfjdb'
    m = re.match(r'a.*b', sentence1)
    print(m)
    print(m.group())

    # 懒惰匹配
    sentence2 = 'aabacddfbabajdfjskdfjdb'
    m = re.match(r'a.*?b', sentence2)
    print(m)
    print(m.group())


if __name__ == '__main__':
    main()
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页