Python 正则表达式详解(re)

文章目录

  • 1 概述
  • 2 语法
    • 2.1 查找字符串 match()、search()、compile()
    • 2.2 查找字符串 findall()、finditer()
    • 2.3 替换字符串 sub()
    • 2.4 拆分字符串 split()
  • 3 扩展
    • 3.1 正则表达式模式
    • 3.3 正则表达式修饰符 - 标志位

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)  # 

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 多行匹配,影响 ^ 和 $

你可能感兴趣的:(Python,python,re,正则表达式)