RE模塊字符串操作
- 使用match方法從開始處匹配字符串,if sucess return Match objection else return None
re.match(pattern,string,flags)
- 使用search方法在整個字符串中匹配子字符串,if sucess return Match objection else return None
re.search(pattern,string,flags)
- 使用findall方法匹配所有符合expression的字符串,if succss return Match-list else return None-list
re.findall(pattern,string,flags)
參數(shù)說明
1.pattern:匹配模板
2.string:匹配字符串
3.flags:可選參數(shù),用于控制匹配方式,如是否區(qū)分大小寫
- 使用sub方法替換字符串
re.sub(pattern,repl,string,count,flag)
參數(shù)說明
1.pattern:匹配模板
2.repl:表示替換成的字符串
3.string:表示被替換的字符串
3.count:表示替換最大次數(shù)
- 使用split方法分割字符串
re.split(pattern,string,[maxsplit],[flags])
參數(shù)說明
1.string:分割字符串
2.maxplit:最大分割次數(shù)
import re
pattern = r'mr_\w+'
string = 'MR_one mr_two'
match = re.match(pattern,string,re.I)
print(match)
print(match.string) #提取要匹配的字符串
print(match.start()) #匹配起始位置
print(match.end()) #匹配結(jié)尾位置
print(match.span()) #匹配起始結(jié)尾位置元組
print(match.group()) #匹配的數(shù)據(jù)
<_sre.SRE_Match object; span=(0, 6), match='MR_one'>
MR_one mr_two
0
6
(0, 6)
MR_one
string = '321 Mr_luo'
search = re.search(pattern,string,re.I)
print(search.string)
print(search.group())
321 Mr_luo
Mr_luo
string = 'dsadsa 123 dsad 123 dsa 123 dsa 123'
pattern = '[0-9]{1,3}'
findall = re.findall(pattern,string)
print(findall)
['123', '123', '123', '123']
pattern = '[0-9]{1,3}'
repl = 'SSS'
print('替換之前:',string)
sub = re.sub(pattern,repl,string)
print('替換之后:',sub)
替換之前: dsadsa 123 dsad 123 dsa 123 dsa 123
替換之后: dsadsa SSS dsad SSS dsa SSS dsa SSS
print('分割之前:',sub)
pattern = '[a|s]'
split = re.split(pattern,sub,0,re.I)
print('分割之后:',split)
分割之前: dsadsa SSS dsad SSS dsa SSS dsa SSS
分割之后: ['d', '', 'd', '', ' ', '', '', ' d', '', 'd ', '', '', ' d', '', ' ', '', '', ' d', '', ' ', '', '', '']
# 匹配IP地址
import re
pattern1 = r'[1-9]{1,3}(\.[0-9]{1,3}){3}'
pattern2 = r'[1-9]{1,3}(\.[0-9]{1,3}){2}'
pattern3 = r'([1-9]{1,3}(\.[0-9]{1,3}){2})'
pattern4 = r'([1-9]{1,3}(\.[0-9]{1,3}){3})'
string = '193.168.1.1 192.168.1.66'
findall1 = re.findall(pattern1,string)
print(findall1)
findall2 = re.findall(pattern2,string)
print(findall2)
findall3 = re.findall(pattern3,string)
print(findall3)
findall4 = re.findall(pattern4,string)
print(findall4)
['.1', '.66']
['.1', '.1']
[('193.168.1', '.1'), ('192.168.1', '.1')]
[('193.168.1.1', '.1'), ('192.168.1.66', '.66')]
for item in findall4:
print(item[0])
193.168.1.1
192.168.1.66
由上面的例子可以看到當分組里面套了分組的時候程序是如何運行的
pattern3 = r'([1-9]{1,3}(.[0-9]{1,3}){2})'
pattern4 = r'([1-9]{1,3}(.[0-9]{1,3}){3})'
如這兩個表達式在匹配的時候先忽略內(nèi)層括號,考慮最外面一層()進行匹配,然后在匹配內(nèi)層括號內(nèi)的,然后把內(nèi)層與外層的匹配值合并成一組
(.[0-9]{1,3}){2})
(.[0-9]{1,3}){3})
這兩個表達式的意思是重復(fù)匹配表達式(.[0-9]{1,3}),2报腔、3次且取最后一次匹配值