python 基础:正则表达式

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_27295149/article/details/102756089

正则表达式

单字,预定义字符

  • . 或者\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)

猜你喜欢

转载自blog.csdn.net/qq_27295149/article/details/102756089