Python 正则表达式详解(re)

1 概述

说明:常用的正则表达式详解,若后续继续使用其它,再来补充。

import re
1. 查找字符串
match()、search()、compile()
匹配一次
findall()、finditer()
匹配所有
2. 替换字符串
sub()
3. 拆分字符串
split()

2 语法

2.1 查找字符串 match()、search()、compile()

re.match(pattern, string, flags=0)   # 只匹配字符串的开始位置
re.search(pattern, string, flags=0)  # 匹配整个字符串,找到第一个匹配
re.compile(pattern[, flags])         # 编译正则表达式,供 ↑ 使用

# pattern:正则表达式模式
# string:要匹配的字符串
# flags=0:标志位。参见:"正则表达式修饰符 - 标志位"

示例:None 中没有 .span() 故报错

import re

# .span(): 位置   .group(): 值
m1 = re.match('www', 'www.baidu.com').span()
m2 = re.match('com', 'www.baidu.com')

s1 = re.search('www', 'www.baidu.com').span()
s2 = re.search('com', 'www.baidu.com').span()

patter_c = re.compile(r'\d+')  # 至少匹配一个数字
c1 = patter_c.match('阿梦520', 2, 10)  # 从 2 开始,10 结束

print(m1)  # (0, 3)
print(m2)  # None
print(s1)  # (0, 3)
print(s2)  # (10, 13)
print(c1)  # <re.Match object; span=(2, 5), match='520'>

2.2 查找字符串 findall()、finditer()

# 请注意 match 和 search 是匹配一次,findall 匹配所有
re.findall(string[, pos[, endpos]])  # return list
re.finditer(pattern, string, flags=0)  # 同 findall,return 迭代器

# string: 原字符串
# pos:开始位置,默认 0 
# endpos:结束位置,默认 字符串的长度

示例:

import re

f1 = re.findall(r'\d+', '阿梦520 - 1314', 2)
f2 = re.finditer(r'\d+', '阿梦520 - 1314', 2)

print(f1)

for match in f2:
    print(match.group())

测试结果:

['520', '1314']
520
1314

2.3 替换字符串 sub()

re.sub(pattern, repl, string, count=0, flags=0)

# pattern:正则表达式模式
# repl:替换后的字符串
# string:原字符串
# count=0:匹配次数,0:替换所有的匹配
# flags=0:标志位
import re

str = '阿梦:151-2345-6789'

# 将任意非数字替换为空
s1 = re.sub('\D+', '', str)
print(s1)  # 15123456789

2.4 拆分字符串 split()

re.split(pattern, string[, maxsplit=0, flags=0])

# pattern:正则表达式模式
# string:原字符串
# maxsplit:分割次数。默认 0:不限制
# flags:标志位

示例:

import re

# 按 非字符、数字、下划线 拆分字符串
s1 = re.split(r'\W+', '阿梦,520,阿优')

print(s1)  # ['阿梦', '520', '阿优']

3 扩展

3.1 正则表达式模式

模式描述举例
^匹配字符串的开头
$匹配字符串的末尾
.匹配任意字符,除了换行符
a|b匹配 a 或者 b
[…]匹配一组字符,如:[abc]:匹配 a、b、c反例 = [^…]
*匹配 0 个或 多个表达式
+匹配 1 个或 多个表达式
?匹配 0 个或 1 个表达式
{n}匹配 n 个表达式
{n, m}匹配 n 至 m 个表达式
{n, }匹配 >= n 个表达式
\w匹配字母、数字及下划线反例 = \W
\s匹配任意空白字符反例= \S
\d匹配任意数字,等价 [0-9]反例 = \D

3.3 正则表达式修饰符 - 标志位

修饰符描述
re.I使匹配对大小写不敏感
re.M多行匹配,影响 ^ 和 $
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼丸丶粗面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值