python——正则表达式

        正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

        正则表达式应用场景主要有爬虫、替换、文本搜索、提取和格式校验等。

一、正则表达式组成

        正则表达式的组成包括普通字符、元字符、预定义字符类、数量词、位置符、分组和反向引用等元素。这些元素结合在一起,能够形成复杂且灵活的匹配模式。通过python中内置模块re实现对正则表达式的使用,并将匹配结果以字符串的形式存入列表中。基本适用代码为:

import re

# 被匹配字符串
context = '怒发冲冠,凭栏处、潇潇雨歇。'
# 匹配规则为匹配任意字符
rule = '^怒发冲冠'
# 根据定义规则进行匹配
result = re.findall(rule, context)
1、普通字符:

        普通字符表示保持其字面含义的字符,例如’a’。

2、元字符:

        元字符用于构建复杂的匹配规则,常见的元字符有‘.’、‘^’、‘$’等。

元字符名称

说明

‘.’

用于匹配换行符以外的任意单个字符

‘^’

用于匹配字符串的开头。例如:'^421'

‘$’

用于匹配字符串的末尾。例如:'421$'

‘*’

用于匹配前面表达式0次或多次。如果匹配不上则返回空字符串('’),而不是不返回任何值。例如:'1*',会将被匹配字符串中的单一字逐一与规则匹配。

‘+’

用于匹配前面表达式1次或多次。如果匹配不上则不返回任何值(包括空字符串)。

‘?’

用于匹配前面表达式0次或1次。如果匹配不上则返回空字符串('’),而不是不返回任何值。

‘[]’

此为字符集,用于匹配字符集中任意字符。例如:'[怒舅舅]',只要这三个字任意一个匹配上即可。

‘|’

‘或’逻辑运算符,也称为管道符。如果使用管道符,则表达式会从左至右依次匹配,原理类似“匹配字符串将从原有字符串中剪切掉,供下一个规则进行匹配”。因此,需要将最复杂的规则放在最前面。

‘()’

分组符号,与‘[]’相对应

‘(?:)’

表示分组不捕获,与“()”最大的区别在于不存储匹配的子字符串

‘\b’

是一种位置符,表示“单词边界”(所谓单词边界指前面是中文或数字或字符或下划线(等价于\w),而后面是其他字符。反过来亦然。以及字符串的开头和结尾)。此方式能够精准获取想要的内容。例如:一段英文中精准获取word单词,而不是wording。

3、预定义字符类

        预定义字符类指简单的特殊字符等价于复杂的表达式,但是在使用时需要注意将‘\’转义。具体如下:

预定义字符类

说明

‘\d’

等价于‘[0-9]’,表示匹配由数字组成的1个或多个字符长度的字符串。

‘\D’

表示匹配由非数字组成的1个或多个字符长度的字符串。

‘\w’

等价于'[\u4e00-\u9fa5a-zA-Z0-9_]',表示匹配任意字母、数字、中文和_

‘\W’

表示匹配非任意字母、数字、中文和_

‘\s’

表示匹配任意空白字符,包括空格、制表符、换行符等。

‘\S’

表示匹配非任意空白字符

4、数量词

数量词

说明

‘{n}’

匹配恰好n次。如果匹配不上则不返回任何值

‘{n,}’

匹配至少n次。

‘{n,m}’

匹配至少n次,至多m次。

二、实例

验证邮箱

import re

with open('./context.txt', mode = 'r', encoding='utf-8') as file:
    # 被匹配字符串
    context = file.read()
    # 匹配规则为匹配任意字符
    # rule = '[\u4e00-\u9fa5a-zA-Z0-9_]+'
    rule0 = '\\w@(163|qq)\\.com'
    rule = '\\w+@(?:163|qq)\\.com' # 仅验证规则,不捕获
    result0 = re.findall(rule0, context)
    result = re.findall(rule, context)
    print(result0)
    print(result)
# 使用捕获输出结果:['163', 'qq']
# 使用不捕获输出结果:['L15151953421@163.com', '12345678@qq.com']

      

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值