Python——正则表达式

Python 中的正则表达式

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

​ 字符串是编程时涉及到的最多的一种数据结构,使用正则表达式可以完成判断一个字符串是否为合法电话号、是否是 Email 格式等操作

​ 文章最后符一些常用的正则表达式!

正则表达式通用符号及解释

模式描述
.匹配任意除 \n外的字符
\转义字符,是一个特殊字符原来的意思
[…]对应位置可以是字符集中的任意字符
\d数字(0~9)
\D非数字
\s空白字符(空格、\t、\r、\n、\f、\v)
\S非空白字符
\w单词字符(AZ、az、0~9)
\W非单词字符
*匹配前一个字符 0 或 无限次
+匹配前一个字符 1 或 无限次
匹配前一个字符 0 或 1 次
{m}匹配前一个字符串 m 次
{m, n}匹配前一个字符串 m 至 n 次
^匹配字符串开头
$匹配字符串末尾
\A仅匹配字符串开头
\Z仅匹配字符串末尾
\b匹配 \w 和 \W 之间
\B与上一个相反

re 模块

​ python 通过导入 re 模块来使用正则表达式功能

import re

re.compile

​ compile 函数的返回值是一个 pattern(正则表达式对象),是用来自己定义正则表达式的函数,下面的句子是描述一个以 he 开头,后面接任意字符,并且以 o 结尾的字符串的正则表达式,例如 hello

pattern = re.compile(r'^(he)+.*o$')

re.match

​ match 函数是根据给定的正则表达式,来判定一个字符串是否符合规则的函数,匹配成功返回一个 match 对象,否则返回 None,下面是以上边 compile 函数返回的正则表达式为基础,对字符串检测的语句

result = re.match(pattern, 'hello')
result = re.match(pattern, 'hello', re.l)
# match 函数的第三个参数 flag 为可选参数,表示标志位,用于控制正则表达式的匹配方式,有如下用法:
# re.l 使匹配对大小写不敏感
# re.L 使匹配对大小写不敏感
# re.M 多行匹配
# re.S 使 . 匹配包括换行在内的左右字符
# re.U 根据 Unicode 字符集解析字符
# re.X 使格式更灵活,以便正则表达式更易于理解

match.group

​ 这个函数是用来获取匹配后的字符串的,它的返回值是一个元组

# 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号
result.group()
# 返回一个包含 num 指定小组所对应值的元组
result.group(num)

re.search

​ search 函数的用法和 match 函数很接近,search 函数会扫描整个字符串并返回第一个成功的匹配,也是一个 match 对象,使用的参数也与 match 函数相同

res = re.search(pattern1, str)
res = re.search(pattern1, str, re.l)

​ 二者的区别在于,match 函数只匹配字符串的开始,如果开始不符合,就会匹配失败,而 search 函数会匹配整个字符串,直到找到一个匹配

re.findall

​ findall 函数会找到字符串中所有符合正则表达式规则的字符串,返回值是一个列表,如果没有匹配,就会返回一个空列表

res1 = re.findall(pattern1, str)

re.finditer

​ finditer 也是查找所有符合正则表达式规则的字符串,不同的是返回值,finditer 返回的是一个迭代器,用法如下

for item in re.finditer(pattern1, str):
    print(item.group())

小样例

​ 常用的正则表达式:

1. Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

2. 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?

3. InternetURL:[a-zA-z]+://[^\s]*^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

4. 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$

5. 电话号码("XXX-XXXXXXX""XXXX-XXXXXXXX""XXX-XXXXXXX""XXX-XXXXXXXX""XXXXXXX"和"XXXXXXXX)^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$

6. 国内电话号码(0511-4405222021-87888822):\d{3}-\d{8}|\d{4}-\d{7}

7. 身份证号(15位、18位数字)^\d{15}|\d{18}$
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值