python正则表达式的基本使用

1.正则表达式库文件:import re

 

2.正则表达式常用符号

. :匹配任意字符,'\n'除外
a = 'zjw1324399'
b = re.findall('z.',a)
'''点号就相当于一个占位符'''
print(b)

Console:
zj

 

* :匹配前一个字符0次或无限次

a = 'zzzjw1324399'
b = re.findall('z*',a)
print(b)

Console:
['zzz', '', '', '', '', '', '', '', '', '', '']

 

? :  匹配前一个字符0次或一次

a = 'zzzjw1324399'
b = re.findall('z?',a)
print(b)

Console:
['z', 'z', 'z', '', '', '', '', '', '', '', '', '', '']

 

.* :  贪心算法

a = 'qwerxxixxxxlovexxxxyouxxabcd'
b = re.findall('xx.*xx',a)
print(b)

Console:
['xxixxxxlovexxxxyouxx']

 

.*?: 非贪心算法

a = 'qwerxxixxxxlovexxxxyouxxabcd'
b = re.findall('xx.*?xx',a)
print(b)

Console:
['xxixx', 'xxlovexx', 'xxyouxx']

 

() :括号内的数据作为结果返回

a = 'qwerxxixxxxlovexxxxyouxxabcd'
b = re.findall('xx(.*?)xx',a)
print(b)
for every in b:
    print(every)

Console:
['i', 'love', 'you']
i
love
you

 

\d+ :匹配纯数字

a = '''12345shangshandalaohu56789laohumeidadao'''
b = re.findall('(\d+)',a)
print(b)

Console:
['12345', '56789']

 

然而值得注意的是以xx作为搜索符号,则所有的字符都必须有自己的搜索符,已经被检索过的搜索符并不算在下一个检索范围内

如:

a = 'qwerxxixxlovexxyouxxabcd'
b = re.findall('xx(.*?)xx',a)
'''love两旁的xx分别是i和you的后缀和前驱,故love并没有被检索到'''
print(b)

Console:
['i', 'you']

若字符存在换行符,如:

a = '''qwerxxi
xxabcdxxlovexxabcdxxyouxxabcd'''
b = re.findall('xx(.*?)xx',a)
print(b)

Console:
['abcd', 'abcd']

若想忽略换行符的,看整体的字符串则需要方法re.S(使 . 的作用域包含\n)

a = '''qwerxxi
xxabcdxxlovexxabcdxxyouxxabcd'''
b = re.findall('xx(.*?)xx',a,re.S)
print(b)

Console:
['i\n', 'love', 'you']

 

3.正则表达式常用方法

findall :匹配所有符合规律的内容

Search :匹配并提取第一个符合规律的内容返回第一个正则表达式对象

a = '''qwerxxixxabcdxxlovexxabcdxxyouxxabcd'''
b = re.search('xx(.*?)xxabcdxx(.*?)xx',a).group(1)
c = re.findall('xx(.*?)xxabcdxx(.*?)xx',a)
print(b)
print(c[0][1])
'''0代表第一种相似的情况,1等同于.group(2)'''

Console:
i
love
a = '''qwerxxixxabcdxxlovexxabcdxxyouxxabcd'''
b = re.search('xx(.*?)xxabcdxx(.*?)xx',a).group(2)
'''group(3)会报错,因为group(n)代表匹配的括号数n'''
print(b) Console: love

 

Sub :替换符合规律的内容,返回替换后的值

a = '''iloveyou'''
hate = 'hate'
b = re.sub('i(.*?)you','i%syou'%hate,a)
'''%s可替换为%d代表int类型,可直接写数字'''
print(b)

Console:
ihateyou

 

posted @ 2021-01-25 23:44  Carrout  阅读(165)  评论(0编辑  收藏  举报