python正则表达式

1.常用符号

 .:会匹配任意字符,换行符\n除外
 *:会匹配前一个字符0次,或者无限次
 ?:匹配前一个字符0次或者一次
 .*:贪心算法
 .*?:非贪心算法
 ():括号内的数据作为结果返回

 

 2.常用方法
 
findall:匹配所有符合规律的内容,返回包含结果的列表
Search:匹配并提取第一个符合规律的内容,返回一个正则表达式对象(object)
Sub:替换符合规律的内容,返回替换后的值

import re
a="xzx123"
b=re.findall('x',a)
print(b)
#['x', 'x']
import re
a="zx123"
b=re.findall('x..',a)
print(b)
#['x12']
import re
a="xzx123"
b=re.findall('x*',a)
print(b)
#['x', '', 'x', '', '', '', '']
import re
a="xzx123"
b=re.findall('x?',a)
print(b)
#['x', '', 'x', '', '', '', '']
import re
c="11111xxixx111xxlovexx111xxyouxx11111111111"
b=re.findall('xx.*xx',c)
print(b)
#['xxixx111xxlovexx111xxyouxx']
#   .*属于贪心算法,会最大限度匹配已xx开头xx结尾的字符串
import re
c="11111xxixx111xxlovexx111xxyouxx11111111111"
b=re.findall('xx.*?xx',c)
print(b)
#['xxixx', 'xxlovexx', 'xxyouxx']
#   .*?属于非贪心算法,找到若干个xx开头结尾的字符串
import re
c="11111xxixx111xxlovexx111xxyouxx11111111111"
b=re.findall('xx(.*?)xx',c)
print(b)
#['i', 'love', 'you']
#   (.*?)匹配出字符串后截取掉括号外的字符,返回括号包围的内容
#当存在换行符的时候
import re
c='''11111xxixx111xxlove
xx111xxyouxx11111111111'''
b=re.findall('xx(.*?)xx',c)
print(b)
#['i', '111']
#点号可以匹配所有字符串,除了换行符,当有换行的时候会变成这样的结果
import re
c='''11111xxixx111xxlove
xx111xxyouxx11111111111'''
b=re.findall('xx(.*?)xx',c,re.S)
print(b)
#S会将点号作用范围扩大到换行符,匹配任意字符,包括新的一行
import re
c='asdfxxIxx123xxlovexxdfs'
b=re.search('xx(.*?)xx123xx(.*?)xx',c).group(2)
print(b)
#love
#匹配第二个括号里面的值,group中的数值最大不能超过一共的括号数
import re
c='asdfxxIxx123xxlovexxdfs'
f=re.findall('xx(.*?)xx123xx(.*?)xx',c)
print(f)
print(f[0][1])
#[('I', 'love')]
#'love'
#匹配结果是个列表,列表里面是个元组,如果findall中有三个括号,那匹配的元组里面就有三个值
import re
c='123abcssfafdsdfs123'
b=re.sub('123(.*?)123','1233333123',c)
print(b)
#'1233333123'
#替换功能,将c中匹配的元素换成1233333123,返回替换后的字符串

 

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