python 基础:正则表达式

正则表达式

单字,预定义字符
  • . 或者\n 外所有字符
  • \d 匹配数字 等同 [0-9]
  • \D 匹配非数字 等同 [^0-9]
  • \s 所有的空白字符 \t\n\r\f\v
  • \S 所有的空白字符 [^\t\n\r\f\v]
  • \w 字母数字字符 [a-zA-Z0-9_]
  • \W 非字母数字字符 [^a-zA-Z0-9_]
批量备选

| e.g yes|no 表示yes和no都可以匹配

量词 (字符 元字符 字符集的重复)
  • 字符 ? 表示0或1
  • 字符 * 表示0或多次
  • 字符 + 表示1或多次

指定范围:{n,m} n,m表示范围次数

  • {n} n次
  • {n,} 至少n次
  • {,m} 最多n次
贪婪和非贪婪

贪婪(默认): 尽量匹配最大范围结果
非贪婪: 尽量匹配最小范围结果 P.S div.*?div

边界
  • ^ 行首
  • $ 行尾
  • \b 单词边界
  • \B 非单词边界
  • \A 输入开关
  • \Z 输入结尾
简单实例
从匹配中提取对象
re.search(r'ab+c', 'ababc')
re.search(r'(ab)+c', 'ababc')

re.search(r'cent(re|er)', 'centre')

re.search(r'(\w) \1', 'hello world') # 空
re.search(r'(\w) \1', 'hello hello') # hello hello 序号从1 开始
匹配使用的方法
  • .findall
  • .match
  • .search
import re

text = 'tom is 8 years old, make is 25 years old.'
# 预编译 
pattern = re.compile('\d+')
# 可以预编译 也可以直接使用
re.findall(text, '\d+')
# findall 找到内容返回list
pattern.findall(text) # ['8', '25']
# match
pattern.match(text) # 开始位置匹配
pattern.match(text, 1) # 从1 位置匹配
# search 任意位置搜索
pattern.search(text) 

# search, mathch 返回的是对象
m = pattern.search(text)
m.group() # 整体 .group(1) 也是整体
# 返回匹配的内容
m.group(1) # '8'
m.group(2) # '25'
# 返回匹配内容的位置
m.start(1) # 7
m.end(1) # 8
# 所有的匹配内容
m.groups() # ('8', '25')
group对象的别名使用
  • 声明 (模式)
  • 引用 (?P模式)
text = 'tom:98'
pattern = re.compile(r'(?P<name>\w+):(?P<score>\d+)')
m = pattern.search(text)
m.group('name')
m.group('score')
.split() 和 .sub()方法

.split()

re.split(r'\W', 'good-morning') # ['good', 'morning]
re.split(r'(-)', 'good-morning') # ['good', '-', 'morning]

.sub()

orders = 'ORD000\nORD001\nORD003'
re.sub(r'\d+', '-', orders) # 'ORD-\nORD-\nORD-\n'

text = 'beautiful is *better* than uglt'
re.sub(r'\*(.*?)\*', '<strong>\g<1><strong>', text)
re.sub(r'\*(?P<html>.*?)\*', '<strong>\g<html><strong>', text)
其他补充
re.I # 忽略大小写
re.M # 匹配多行
re.findall('hello', 'hello Hello', re.I)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值