Python中re模块的使用

在Python中,处理正则表达式的模块是re模块。通过re模块,可以使用正则表达式来进行字符串的匹配、查找、替换等操作。执行效率特别高,可读性不强。

1.方法

match 从头开始匹配 返回Match 或者None

python 复制代码
import re
r = re.match(".\w{10}", "Hello_world hi world", re.I)
print(type(r), r)
if r:
    print(r.group())

search 匹配整个字符串 返回Match 或者None

python 复制代码
r = re.search(r"\d", "1a2b3c")
print(type(r), r)
if r:
    print(r.group())

fullmatch 从头开始匹配 返回Match 或者None

python 复制代码
r = re.fullmatch(r"\d", "12345")
print(type(r), r)
if r:
    print(r.group())

finditer 找到所有,返回迭代器,其中的每一个元素都是Match

python 复制代码
r = re.finditer(r"\d", "1a2b3c4d")
print(r, type(r))

findall 找到所有,返回列表或者空列表

split 切割,返回列表

sub 替换,返回字符串

subn 替换,返回元组(新字符串,替换个数)

python 复制代码
r = re.split(r"\d", "1a2b3c4d", 2)
print(r, type(r))

r = re.sub(r"\d", "+", "1a2b3c4d5e6f7g", 2)
print(r, type(r))

r = re.subn(r"\d", "+", "1a2b3c4d5e6f7g", 2)
print(r, type(r))

2.字符匹配

. 匹配任意字符

\d 匹配数字

\D 非数字

\w 字母数字下划线

\W 非字母数字下划线

\s 空白字符 :空格 制表符 换行符

\S 非空白字符

python 复制代码
r = re.findall(r".", "hello world+-*/")
r = re.findall(r"\d\D", "he1llo33 wor5ld+-*/")
r = re.findall(r"\w\W", "hel.lo33_wor_ld+-*/")
r = re.findall(r"\s\S", "hell o33\n world+-*/")

print(type(r), r)

3.重复

* 出现0-n次

  • 有1-n次

? 有0或1个

.* 默认是贪婪模式(尽可能多匹配) .*? 非贪婪模式(尽可能少匹配)

{n}匹配n次

{m,n}匹配m-n次

python 复制代码
import re
r = re.findall(r"a*b", "aaabcabcdc")
print(r, type(r))

r = re.findall(r"a+b", "aaabcabcdc")
print(r, type(r))

r = re.findall(r"a?", "aaabcabcdc")
print(r, type(r))

r = re.findall(r".*?", "aaabcabcdc")
print(r, type(r))

r = re.findall(r"\d{2}", "12345")
print(r, type(r))

r = re.findall(r"\d{3,5}", "123456789")
print(r, type(r))

4.边界

^ 以开头

$ 以结尾

\b 匹配单词边界

\B 匹配非单词边界

python 复制代码
r = re.findall(r"^.*?\b$", "hello world\tlove China")
print(r, type(r))

5.标识符

re.I 忽略大小写

re.M 多行模式,如果有换行符

re.S 单行模式

python 复制代码
r = re.findall(r"^a.*?d$", "abcd\n1a2b3c4d\n+-*/", re.M)
print(r, type(r))

6.特殊字符

abcdefg\] 只能取一个 \[\^abcdefg\] 不在abcdefg中间 \[a-z0-9A-Z\] 所有数字字母下划线 相当于\\w ```python import re r = re.findall(r"a[bc]d", "abdacdaedafd") print(r, type(r)) r = re.findall(r"^abc", "abdacdabcdedafd") print(r, type(r)) r = re.findall(r"a[a-z0-9A-Z_]d", "abdacdaedafda1da2da3da9daMdaZd") print(r, type(r)) ``` () 分组 \\n 取前面的分组匹配的内容 ( \| ) 分组 ```python import re r = re.findall(r"()", "abcd1234abc123") print(r, type(r)) r = re.findall(r"(\d\d|ab)-\d", "13-24ab-2a") print(r, type(r)) ```

相关推荐
你是狒狒吗4 分钟前
TM中,return new TransactionManagerImpl(raf, fc);为什么返回是new了一个新的实例
java·开发语言·数据库
勤奋的知更鸟15 分钟前
Java编程之组合模式
java·开发语言·设计模式·组合模式
哆啦A梦的口袋呀15 分钟前
基于Python学习《Head First设计模式》第九章 迭代器和组合模式
python·学习·设计模式
虾球xz21 分钟前
CppCon 2015 学习:3D Face Tracking and Reconstruction using Modern C++
开发语言·c++·学习·3d
林鸿群24 分钟前
C#子线程更新主线程UI及委托回调使用示例
开发语言·c#
sponge'35 分钟前
opencv学习笔记2:卷积、均值滤波、中值滤波
笔记·python·opencv·学习
databook1 小时前
概率图模型:机器学习的结构化概率之道
python·机器学习·scikit-learn
拾回程序猿的圈圈∞1 小时前
实战二:开发网页端界面完成黑白视频转为彩色视频
python·ai编程
亚林瓜子1 小时前
AWS Elastic Beanstalk + CodePipeline(Python Flask Web的国区CI/CD)
python·ci/cd·flask·web·aws·beanstalk·codepipeline