Python菜鸟进阶之路19:正则表达式
程序员文章站
2022-09-13 22:35:19
1. 使用正则表达式需要import re2. 常用函数(1)findall()点的使用str1 = 'abcdef'list1 = string1.findll('a.',str1)#返回的是一个列表print(list1)“.”表示字符串后的点表示任意1为字符点的使用......
1. 导入re模块。
使用正则表达试,需要导入re模块。
import re #加载正则表达式模块
2. re.findall()的使用
re.findall()返回的是一个列表,根据使用的通配符的情况其表现的形式不一样。
(1). : 表示任意1位字符,除了换行符\n和制表符\t。所以如果想表示2位,当然就用两个..啦
import re
str1='I love Python'
#.表示任意1位字符,除了换行符\n和制表符\t
a=re.findall('l.',str1) #findall的返回值是一个列表
print(a)#['lo']
(2).* :贪婪匹配
import re
str1='I love Python'
#.*贪婪匹配
print(re.findall('l.*',str1)) #匹配l之后的所有值,包含l ['love Python']
print(re.findall('l.*e',str1)) #匹配l之后到g之前的所有值,包含l和e ['love']
(3).*?:偷懒匹配
带?表示有选择权,有选择权就懒了!!!
如果不指定结束,就会偷懒哈。
如果指定结束,则乖乖的匹配到结束为止了
import re
str1='I love Python'
#.*?偷懒匹配
print(re.findall('l.*?',str1)) #匹配l之后的任意字符,那么它就偷懒了,匹配了0个字符 ['l']
print(re.findall('lo.*?on',str1)) #匹配lo之后到on之前的所有值,包含lo和on,如果匹配到值了就停 ['love Python']
(4)(.*?):带上括号之后,就不包含边界值。只返回边界内的值。
import re
str1='I love Python'
#(.*?)带上括号之后,就不包含边界值
print(re.findall('l(.*?)e',str1))#['ov']
(5)*和+的区别
+号至少要匹配一位,而*可以是0位。
两者都可以匹配多位。
import re
str1='I love Python'
#*和+的区别,+号至少要匹配一位,而*可以是0位,当然两者都可以匹配多位
print(re.findall('lo.+?',str1)) #偷懒匹配,但至少要匹配1位 ['lov']
print(re.findall('lo.*?',str1)) #偷懒匹配,直接不匹配字符了['lo']
print(re.findall('lo.+?e',str1)) #因为后边界必须是e,所以偷懒不了了['love']
print(re.findall('lo.*?e',str1)) #因为后边界必须是e,所以偷懒不了了['love']
(6)\w :匹配字母数字下划线
import re
# \w 表示匹配字母数字下划线
str1='abc$de'
print(re.findall('\w{1}',str1)) #{}里面的数字表示多少个字母数字下划线连续匹配['a', 'b', 'c', 'd', 'e']
print(re.findall('\w{2}',str1)) #{}里面的数字表示多少个字母数字下划线连续匹配['ab', 'de']
print(re.findall('\w{3}',str1)) #{}里面的数字表示多少个字母数字下划线连续匹配['abc']
(7)\W :匹配非字母数字下划线(W时大写哦!)
import re
# \W 表示匹配非字母数字下划线
str1='abc$de'
print(re.findall('\W{1}',str1)) #{}里面的数字表示多少个非字母数字下划线连续匹配['$']
print(re.findall('\W{2}',str1)) #{}里面的数字表示多少个非字母数字下划线连续匹配[]
print(re.findall('\W{3}',str1)) #{}里面的数字表示多少个非字母数字下划线连续匹配[]
(8)\s和\S
\s 匹配空字符串,以及\t制表符,换行符\n。
\S 匹配非(空字符串,以及\t制表符,换行符\n)。
import re
#\s 匹配空字符串,以及\t制表符,换行符\n
#\S 匹配非(空字符串,以及\t制表符,换行符\n)
str1=' abc\n '
print(re.findall('\s',str1))#[' ', ' ', ' ', ' ', ' ', ' ', ' ', '\n', ' ', ' ', ' ']
print(re.findall('\S',str1))#['a', 'b', 'c']
(9)\d和\D
\d:匹配数字
\D:匹配非数字
import re
#\d 匹配数字
str9='a1b2c3sgfsafsf3253244'
print(re.findall('\d',str9))#['1', '2', '3', '3', '2', '5', '3', '2', '4', '4']
# \D匹配非数字
print(re.findall('\D',str9))#['a', 'b', 'c', 's', 'g', 'f', 's', 'a', 'f', 's', 'f']
(10)修饰符re.I 不区分大小写
import re
#修饰符re.I 不区分大小写
str1='abcABCaBCAbc'
print(re.findall('abc',str1)) #区分大小写['abc']
print(re.findall('abc',str1,re.I)) #不区分大小写['abc', 'ABC', 'aBC', 'Abc']
(11)修饰符re.S 匹配所有字符
import re
#修饰符re.S 匹配所有字符
str11='abc\ndef\tegfwf'
print(re.findall('.+',str11))#['abc', 'def\tegfwf']
print(re.findall('.+',str11,re.S))#['abc\ndef\tegfwf']
(12)^匹配开头,$匹配结尾
import re
#^匹配开头,$匹配结尾
list1=['abcde','deabc','ghabcdef']
for i in list1:
print(re.findall('^abc',i))
print(re.findall('abc$',i))
本文地址:https://blog.csdn.net/weixin_35860563/article/details/107134341