学习python的第四十四天-正则表达式

正则表达式

正则表达式用于搜索,替换和解析字符串。正则表达式遵循一定的语法规则,使用非常灵活,功能强大。使用正则表达式编写一些逻辑验证非常方便,例如电子邮件地址格式的验证。python提供了强大的re模块实现正则表达式的验证。

正则表达式简介

正则表达式是用于文本匹配的工具,它在源字符串中查找与给定的正则表达式相匹配的部分。一个正则表达式是由字母,数字和特殊字符(括号,星号,问号等)组成。正则表达式中有许多特殊的字符,这些特殊字符是构成正则表达式的要素。

匹配符[]可以指定一个匹配范围,例如“[ok]”将匹配包含“o”或“k”的字符。同时[]可以与\w\s\d等标记等价。例如:[0-9a-zA-Z_]等价于\w[^0-9]等价于\D。可以利用{}控制字符重复的次数。例如\d{1,4}表示1~3位数。{3}表示3位数字。需要注意的是 “()”在正则表达式中是特殊符号,如果需要把它们作为普通字符处理,前面要加转义符“\”。

如果要对正则表达式嵌套,就需要使用分组“()”。例如,对三维数字重复两次可以使用如下表达式:

(\d\d\d){2}

默认情况下,正则表达式将匹配最长的字符串作为结果,可以通过在限定符后面添加“?”的方式,获取最短的匹配结果。

使用re模块处理正则表达式

pythonre模块具有正则表达式匹配的功能,re模块提供了一些根据正则表达式进行查找,替换,分隔字符串的函数,这些函数使用一个正则表达式作为第一个参数。re模块中的一些函数都有一个flags参数,该参数用于设置匹配的附加选项。例如,是否忽略大小写,是否支持多行匹配等。re模块定义了一些产量表示这些选项,使用前导符“re”加选项的简写或名称的方式表示某个常量。正则表达式有三种间隔符号:“^”“$”“\b”。“^”匹配字符串首部的子串,“$”匹配结束部分的子串,“\b”用于分割单词。若正则表达式匹配失败,则返回“[]”。这里提供一段检测正则表达式是否正确的代码:

import re

test1 = '需要匹配到的字符串'
if re.match(r'正则表达式', test1): 
    print('Ok')
else:
    print('Failed')

下面通过python程序来实现电话号码的匹配:

import re

# 限定符的使用
tel1 = "0791-1234567"
print (re.findall(r"\d{3}-\d{8}|\d{4}-\d{7}", tel1))
tel2 = "010-12345678"
print (re.findall(r"\d{3}-\d{8}|\d{4}-\d{7}", tel2))
tel3 = "(010)12345678"
print (re.findall(r"[\( ]?\d{3}[\]-]?\d{8}|[\( ]?\d{4}[\]-]?\d{7}", tel3))

正则表达式的解析非常费时。如果多次使用统一规则匹配字符串,可以使用compile()进行预编译,compile 函数返回一个pattern对象。该对象拥有一系列方法用于查找,替换或扩展字符串,从而提高字符串的匹配速度。

#compile()预编译
import re

s = "1abc23def45"
p = re.compile(r"\d+")
print (p.findall(s))
print (p.pattern)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值