Python正则

简介: 【10月更文挑战第18天】

【10月更文挑战第18天】
|字符
|作用
|
|-|-|
|.|通配符,匹配任意字符(除了\n之外)|
|\d|匹配数字: 0,1,2,3,4,5,6,7,8,9|
|\D|匹配非数字, 即不是数字|
|\s|匹配空白, 即 [\t\n\r\f等]\f换页\r回车|
|\S|匹配非空白,与\s相反|
|\w|匹配单词字符, 即a-z,A-Z,0-9,_,汉字|
|\W |匹配非单词字符,即匹配特殊字符|

\w 匹配单词字符,如字母、数字、下划线、汉字

.的匹配操作

import re
#.匹配任意字符,除了\n
print(re.findall('.','test\tand\n'))
#['t', 'e', 's', 't', '\t', 'a', 'n', 'd']
#可以将整个字符串进行一个拆分,将每个元素进行一个获取放到列表中存放

可以将整个字符串进行一个拆分,将每个元素进行一个获取放到列表中存放

除了\n都能进行匹配的操作

image.png

r=re.match('aaa.','aaa1212bbb')
print(r.group())
#aaa1
'''
正则表达式'aaa.'将会匹配字符串'aaa1212bbb'中的'aaa'
后面紧跟着的第一个字符,也就是数字'1'。因此,r.group()将会输出'aaa1'。
'''

\d的匹配操作

将字符串中的数字提取出来

import re
print(re.findall('\d','abd6c123'))
#['6', '1', '2', '3']

\D的匹配操作

将字符串中的非数字匹配提取出来

import re
print(re.findall('\D','abd6c123'))
#['a', 'b', 'd', 'c']

\s的匹配操作

匹配空白字符

import re
print(re.findall('\s','ted \t anfdsa sd '))
#[' ', '\t', ' ', ' ', ' ']

\S的匹配操作

匹配非空白字符

import re
print(re.findall('\S','ted \t anfdsa sd '))
#['t', 'e', 'd', 'a', 'n', 'f', 'd', 's', 'a', 's', 'd']

只要不是空白都能提取出来

\w的匹配操作

标点符号啥的都不进行匹配操作

匹配单词字符,如字母数字下划线等

import re
print(re.findall('\w','hi,小明!'))
#['h', 'i', '小', '明']

\W的匹配操作

作用与\w相反的

import re
print(re.findall('\W','hi,小明!'))
#['h', 'i', '小', '明']
#[',', '!']

[ ] 匹配[ ]列举的任意字符

我们上面的方法里面没有单独将字母进行分离出来的字符


import re
print(re.findall('[a-z]','hi,小明!123'))
#['h', 'i']

括号里面是字母的范围,只要字符串里面有满足这个条件的都会进行剥离出来的

只会匹配括号内列举出来的,一次匹配一个

import re
print(re.findall('[a-z,A-Z]','hi,小明DFS!123'))
#['h', 'i', ',', 'D', 'F', 'S']

在这个例子中,我们在括号内列举了a-z和A-Z,然后中间有个逗号

都算进了寻找的范围

那么如果我们想单单寻找小写和大写的字母的话,这么写

import re
print(re.findall('[a-zA-Z]','hi,小明DFS!123'))
#['h', 'i', 'D', 'F', 'S']

这么写就没有其他多余的元素了

我们想寻找什么东西就把这个写在[ ]内就行了

匹配数字

import re
print(re.findall('[0-9]','hi,小明DFS!123'))
#['1', '2', '3']

在括号内输入寻找数字的范围就行了

匹配数字,但不包含4

import re
print(re.findall('[0-35-9]','hi,小明DFS!124653'))
#['1', '2', '6', '5', '3']

输入范围0-3 5-9

匹配多个字符是基于单个字符的

字符 作用
* 匹配前一个字符出现0次或者无限次
+ 匹配前一个字符出现1次或者无限次
匹配前一个字符出现1次或者0次即要么有1次,要么没有
{m} 匹配前一个字符出现m次,
{m,} 匹配前一个字符至少出现m次,
{m,n} 匹配前一个字符出现从m到n次

image.png

*的匹配使用

import re
print(re.findall('\S*','hi,my name is xiaoming'))
#['hi,my', '', 'name', '', 'is', '', 'xiaoming', '']

*允许匹配0次,返回一个空白字符,所以会算上这个空格的

+的匹配使用

import re
print(re.findall('\S+','hi,my name is xiaoming'))
#['hi,my', 'name', 'is', 'xiaoming']

至少匹配1次,所以我们是不会算上空格的

所以说在空格之前都算上匹配中的

*和+的比较

通过比较我们能发现这个用*的话多了很多的空格

因为*允许匹配0次,返回一个空白字符

设置匹配的长度---{m }--匹配长度为m

import re
print(re.findall('\d{3}','1233456'))
#['123', '345']

我们使用{}进行长度的限制,长度至少是3才能进行匹配的操作

至少匹配次数---{m, }


import re
print(re.findall('\S{4,}','hi,my name is xiaoming'))
#['hi,my', 'name', 'xiaoming']

这里我们至少匹配4次才会算数的

这里的is就没有算进去,因为长度是不够的,不满足

匹配{m,n}次

至少匹配m次,最多匹配n次

import re
print(re.findall('\S{2,4}','hi,my name is xiaoming'))
#['hi,m', 'name', 'is', 'xiao', 'ming']

至少两次,最多4次

在这里我们没有进行y的输出,因为不满足条件了,而且后面有个空格,然后就进行下一组的匹配了

贪婪:满足匹配的情况下,尽可能匹配多的数据

非贪婪:满足匹配的情况下,尽可能匹配少的数据

image.png

默认是贪婪模式

import re
print(re.findall('\S{2,4}','hi,my name is xiaoming'))
#['hi,m', 'name', 'is', 'xiao', 'ming']

这拿xiaoming 来举例子

我们xiao里面拿两个(xi)也能进行匹配,四个(xiao)也能进行匹配

但是我们这里选择了4个

所以我们这里是贪婪的

贪婪模如何修改为非贪婪模式呢?在匹配多个的后面加上问号?


import re
print(re.findall('\S{2,4}?','hi,my name is xiaoming'))
#['hi', ',m', 'na', 'me', 'is', 'xi', 'ao', 'mi', 'ng']

这种就是非贪婪的,满足条件的情况下尽量匹配少的数据

最上面的那种一次匹配4次,尽可能匹配多的数据,这个就是贪婪的情况

r=re.match('aaa.','aaa1212bbb')
print(r.group())
#aaa1
'''
正则表达式'aaa.'将会匹配字符串'aaa1212bbb'中的'aaa'
后面紧跟着的第一个字符,也就是数字'1'。因此,r.group()将会输出'aaa1'。
'''

#贪婪
r=re.match('aaa.+','aaa1212bbb')
print(r.group())
#aaa1212bbb


#非贪婪
r=re.match('aaa.+?','aaa1212bbb')
print(r.group())
#aaa1
#至少匹配1次并且是非贪婪的,那么尽可能少,

正则表达式'aaa.'将会匹配字符串'aaa1212bbb'中的'aaa'

后面紧跟着的第一个字符,也就是数字'1'。因此,r.group()将会输出'aaa1'。

aaa.+至少匹配一次

但是后面加个?的话那么就只会匹配一次了,

因为是非贪婪了

相关文章
|
2月前
|
Python
Python正则
【10月更文挑战第19天】
Python正则
|
2月前
|
存储 Python Perl
python正则语法
本文介绍了正则表达式的基础知识及其在 Python 中的应用。首先解释了为什么要使用正则表达式,通过一个判断手机号的示例展示了正则表达式的简洁性。接着详细介绍了 `re` 模块的常用方法,如 `match()`、`search()`、`findall()`、`finditer()` 等,并讲解了正则表达式的基本语法,包括匹配单个字符、数字、锚字符和限定符等。最后,文章还探讨了正则表达式的高级特性,如分组、编译和贪婪与非贪婪模式。
25 2
|
3月前
|
JavaScript 前端开发 Scala
Python学习十:正则表达式
这篇文章是关于Python中正则表达式的使用,包括re模块的函数、特殊字符、匹配模式以及贪婪与非贪婪模式的详细介绍。
25 0
|
5月前
|
Python
Python中的正则
【8月更文挑战第10天】
37 2
|
8月前
|
Python
python小案例-re正则
python小案例-re正则
|
数据采集 Python
Python正则表达式 2
Python正则表达式
70 0
|
Python
【从零学习python 】62. Python正则表达式:强大的字符串匹配工具
【从零学习python 】62. Python正则表达式:强大的字符串匹配工具
85 0
|
数据库 Python Perl
Python学习笔记第十八天(正则)
Python学习笔记第十八天讲解正则表达式、检索和替换的用法。
69 0
Python学习笔记第十八天(正则)
|
Python
python正则
python正则
93 0
python正则
|
数据采集 算法 编译器
Python正则表达式-总结
Python正则表达式-总结
158 0