Python程序设计之正则表达式(下)

183 阅读3分钟
参与拿奖:本文已参与「新人创作礼」活动,一起开启掘金创作之路
1.match函数详解

(matchobject/None) match(pattern,string[,flags])

函数参数由模式串patter,原字符串,以及可选参数组成,patter的值有以下几种

'\\d+'	#使用"\"开头的元字符实现字符串特定搜索
r'\d+'	#使用r''原始字符串实现字符串特定搜索
r"(\w+) (\w+)"	
"(\\d+) (\\w+)" #用子模式做匹配字符串
#子模式是指以"(正则表达式)"这种形式存在的字符串

第三个可选参数有以下几种选择,可以使用"|"符号自由组合

import re
re.I	#表示忽略大小写
re.L	#做本地化识别(locale-aware)匹配
re.M	#表示多行匹配模式
re.S	#表示元字符可以匹配任何字符,包括换行符
re.U	#配Unicode字符
re.X	#忽略模式中空格,并可以使用#注释

当match()函数返回match对象时,有以下几种方法

import re
tr='hello 20 hello 35 nihao 40 hello'
part1=re.compile(r'\d+')  #使用"\"开头的元字符实现字符串特定搜索
part4=re.compile('\\s+')
resulit1=part1.search(sss,index1)    #按照索引搜索
resulit2=part4.search(sss)
res=re.match("(\\w+) (\\d+)","heelo 12,hello 14")
print(res.groups(),end='\n')
res1=re.match(r"(\w+) (\w+)","heelo my hello you").groups()
print(res1,end='\n')
#print(res.groups(),end='\n')   #s输出第一个元组信息
#print(resulit1.group(1),end='\n')
print(resulit1.groups(),end='\n')

print(resulit1.start(),end='\n')    #返回第一次出现的位置
print(resulit2.end(),end='\n')  #返回最后一次出现的位置

print(resulit1.groupdict(),end='\n')    #输出字典
print(resulit2.groupdict(),end='\n')

print(resulit1.span(),end='\n') #返回字符出现开始和结束位置
print(resulit2.span(),end='\n')
print(re.match(r"(\w+) (\w+)","heelo my hello you").group(1,2))
print(re.match(r"(?P<f>\w+) (?P<s>\w+)","heelo my hello you").group('f','s'))

下面是输出结果:

('heelo', '12')
('heelo', 'my')
()
21
6
{}
{}
(21, 23)
(5, 6)
<re.Match object; span=(0, 8), match='hello 23'>
('heelo', 'my')
('heelo', 'my')

代码:

import re
ss='hello 23 world 56 my number is 1234-5678'
print(re.match('(\\w+) (\\d+)',ss))

输出

<re.Match object; span=(0, 8), match='hello 23'>

2.search()函数

matchobject/None search(pattern,string[,flags])

search()函数返回的是模式串的详细信息

import re
s0='135-94359171 155-12345678 hello 2122-505678'
print(re.search(r'(\d{3,4})-(\d{6,8})', s0),end='\n')

结果如下:

123-1231441<re.Match object; span=(0, 12), match='135-94359171'>
3.split()函数

list split(pattern,string[,maxsplit=0])

import re
sss='first match object h 20 552'
part4=re.compile('\\s+')
print(part4.split(sss)) #按照匹配模式进行划分

输出结果:

['first', 'match', 'object', 'h', '20', '552']
4.sub()函数

string sub(pattern,string[,count=0])

import re
sss='first match object h 20 552'
part2=re.compile('\\d+')  #使用r''原始字符串实现字符串特定搜索
print(part2.sub('h',sss))
print(re.sub(part2,'h',sss))   #替换模式匹配的字符串

结果

first match object h h h
first match object h h h
5.escape()函数

string escape(string)

import re
sss='first match object h 20 552'
print(re.escape(ssss))  #将特殊字符进行转义

结果:

first\ match\ object\ \\\ \\\+
6.findall()函数

list findall(pattern,string[,flags])

import re
sss='first match object h 20 552'
part1=re.compile(r'\d+')  #使用"\"开头的元字符实现字符串特定搜索
part3=re.compile('\\w+')
#求所有符合条件的字符
print(part1.findall(sss))   #findall()函数是输出所符合条件的模式匹配项
print(part3.findall(sss))

结果:

['20', '552']
['first', 'match', 'object', 'h', '20', '552']