正则模块

正则模块:re
import re
print(re.findall('\w','egon 123 + _ - *'))  #\w匹配字母数据及下划线

print(re.findall('\W','egon 123 + _ - *'))  #\W匹配非字母数据及下划线

print(re.findall('\s','egon\t 12\n3 + _ - *'))  #\s匹配任意空白字符,等价于[\f\n\r\t]

print(re.findall('\S','egon 123 + _ - *'))   #\S匹配任意非空字符

print(re.findall('\d','egon\t 12\n3 + _ - *')) #\d匹配任意数字,等价于[0-9]

print(re.findall('\D','egon\t 12\n3 + _ - *')) #\D匹配任意非数字

print(re.findall('\A','egon\t 12\n3 + _ - *')) #匹配字符串开始

print(re.findall('\n','egon\t 12\n3 + _ - *'))  #匹配一个换行符

print(re.findall('\t','egon\t 12\n3 + _ - *'))  #匹配一个制表符

print(re.findall('^e','egon\t 12\n3 + _ - *'))  #匹配以什么开头

print(re.findall('o$','egon\t 12\n3 + _ - * foo'))  #匹配以什么结尾

重复:./?/*/+/.*/*?
.代表任意一个字符
print(re.findall('e.gon','egon\t 12\n3 + _ - * foo'))

print(re.findall('e.gon','egon\t 12\n3 + _ - * foo',re.DOTALL))  #DOTALL表示“.”代表所有

?代表?左边的字符出现0或1次
print(re.findall('ab?','a ab abb abbb  a1b'))

*代表*号左边的字符出现0次或无穷次
print(re.findall('ab*','a ab abb abbb  a1b'))

+代表+号左右的字符出现1次或无穷次
print(re.findall('ab*','a ab abb abbb  a1b'))

{m,n}代表左边的字符出现m到n次
print(re.findall('ab{1,2}','a ab abb abbb  a1b'))

.*贪婪匹配
print(re.findall('a.*b','a ab abb abbb  a1b'))

*?非贪婪匹配
print(re.findall('a*?b','a ab abb abbb  a1b'))

|或者
print(re.findall('mysql(*?:e|d)','aaa mysqle and mysqld'))

()匹配括号内的表达式,也表示一个组

rawstring:
print(re.findall(r'a\\c','a\c alc aBc')) #等于  print(re.findall('a\\\\c','a\c alc aBc'))

[]代表取中括号内任意的一个字符
print(re.findall('a[a-z]','ac alc aBc a-d zxc  aaa'))
print(re.findall('a[0-9]','ac alc aBc a-d zxc  aaa'))
print(re.findall('a[a-z]','ac alc aBc a-d zxc  a+b'))
print(re.findall('a[a-zA-Z]','ac alc aBc a-d zxc  aaa'))
print(re.findall('a[-+*/]','ac alc aBc a-d z-c  a+a'))  #匹配“-”必须放到两边

[^aa]代表取除了aa的字符串。

re模块的使用方法:
re.search  #只匹配成功一次,并返回
print(re.search('a[a-z]','ac alc aBc a-d zxc  aaa').group())  

re.match   #只从开头匹配
print(re.match('a[a-z]','a2 alc aBc a-d zxc  aaa').group())

re.split   #切分
print(re.split(':','root:x:0:0::/root:/bin:/bash'))
print(re.split(':','root:x:0:0::/root:/bin:/bash',maxsplit=1))  #maxsplit最大切分次数

re.sub    #匹配并替换
print(re.sub('root','lzx','root:x:0:0::/root:/bin:/bash',1)) #1代表替换几次,默认替换所有
print(re.sub('([a-z]+)([^a-z]+)(.*?)([^a-z]+)([a-z])$',r'\5\2\3\4\1','root:x:0:0::/root:/bin:/bash')) #将一个单词和最后一个单词互换位置

re.compile #定义一个正则表达式可以重复使用
obj=re.compile('a\d{2}b')
print(obj.findall('a12b a123b abbb'))

猜你喜欢

转载自blog.51cto.com/13399294/2173567