正则表达式的快速入门与Python re模块的使用

1.正则表达式30分钟入门教程

定义:正则表达式是筛选符合规则的字符串的一个式子,使用它可以查找符合某些复杂规则的字符串。

举例:设置密码时规定的“需要含有字母、数字”等等就可以通过设置正则表达式进行匹配,防止用户设置不符合规定的密码。

Link:正则表达式30分钟入门教程30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它。https://deerchao.cn/tutorials/regex/regex.htm

在线正则表达式测试工具:

正则表达式在线测试 | 菜鸟工具一、校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(\.[0-9]{1,2})?$ 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})$ 正数、负数、和小数:^(\-|\+)?\d+(\.\..icon-default.png?t=LA92https://c.runoob.com/front-end/854/

*常用的元字符

 *常用的限定符

*字符转义

eg: \\ = \

*字符类

[aeiou] 查找有aeiou的字符

[a-z0-9] 查找a-z的字母或0-9的数字

*分枝条件

符号:前条件|后条件

判断方法:从左至右依次匹配,成功则停止

*分组

(正则表达式){次数}(正则表达式)

*常用的反义代码

*后向引用与零宽断言

 *贪婪与懒惰

# 正则表达式匹配时,通常在满足条件的前提下匹配尽可能多的字符。

 *处理选项

(.Net环境下)

 *平衡组/递归匹配

(处理括号左右数量不相等的情况)

利用的是堆栈的思想。

 *其他语法

参考文档

正则表达式语言——快速参考icon-default.png?t=LA92https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/regular-expression-language-quick-reference?redirectedfrom=MSDN

2.Python中用于正则表达式处理的Re模块

 

其中flags是处理选项:

 

 实例1:验证输入用户名和QQ号是否有效并给出对应的提示信息。

'''
验证输入用户名和QQ号是否有效并给出对应的提示信息

要求:用户名必须由字母、数字或下划线构成且长度在6~20个字符之间,QQ号是5~12的数字且首位不能为0
'''
import re

def main():
    username = input('输入用户名:')
    qq = input('请输入QQ号:')
    # match函数的第一个参数是正则表达式字符串或正则表达式对象
    # 第二个参数是要跟正则表达式做匹配的字符串对象
    m1 = re.match(r'^[0-9a-zA-Z_]{6,20}$', username)
    if not m1:
        print('请输入有效的用户名')
    m2 = re.match(r'^[1-9]\d{4-11}$', qq)
    if not m2:
        print('请输入有效的QQ号')
    if m1 and m2:
        print('你输入的信息是有效的!')

if __name__ == '__main__':
    main()

实例2:从一段文字中提取出国内手机号码。

 

import re


def main():
    # 创建正则表达式对象 使用了前瞻和回顾来保证手机号前后不应该出现数字
    pattern = re.compile(r'(?<=\D)1[34578]\d{9}(?=\D)')
    sentence = '''
    重要的事情说8130123456789遍,我的手机号是13512346789这个靓号,
    不是15600998765,也是110或119,王大锤的手机号才是15600998765。
    '''
    # 查找所有匹配并保存到一个列表中
    mylist = re.findall(pattern, sentence)
    print(mylist)
    print('--------华丽的分隔线--------')
    # 通过迭代器取出匹配对象并获得匹配的内容
    for temp in pattern.finditer(sentence):
        print(temp.group())
    print('--------华丽的分隔线--------')
    # 通过search函数指定搜索位置找出所有匹配
    m = pattern.search(sentence)
    while m:
        print(m.group())
        m = pattern.search(sentence, m.end())


if __name__ == '__main__':
    main()

ex:其中的group()函数用来用来提出分组截获的字符串

实例3:替换字符串中的不良内容

import re


def main():
    sentence = '你丫是傻叉吗? 我操你大爷的. Fuck you.'
    purified = re.sub('[操肏艹]|fuck|shit|傻[比屄逼叉缺吊屌]|煞笔',
                      '*', sentence, flags=re.IGNORECASE)
    print(purified)  # 你丫是*吗? 我*你大爷的. * you.


if __name__ == '__main__':
    main()

实例4:拆分长字符串

import re


def main():
    poem = '窗前明月光,疑是地上霜。举头望明月,低头思故乡。'
    sentence_list = re.split(r'[,。, .]', poem)
    while '' in sentence_list:
        sentence_list.remove('')
    print(sentence_list)  # ['窗前明月光', '疑是地上霜', '举头望明月', '低头思故乡']


if __name__ == '__main__':
    main()

ex:Beautiful SoupLxml作为爬虫时匹配字符串的库也很好用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值