正则表达式
本篇内容:
- re.search(pattern,string,flags=0): 匹配第一个位置
- re.match()从开始位置进行pattern匹配,其他同search
- re.fullsearch()整个字符串是否匹配
- re.findall() 以顺序列表返回全部的匹配字符串
- re.finditer()返回所有符合匹配的迭代match
- re.split(pattern,string,massplit=0,flags=0)
- re.sub(pattern,repl,string,count=0,flags=0)替换匹配项
- re.compile(pattern)
- match对象:
re.search(pattern,string,flags=0): 匹配第一个位置
return match对象,未成功返none
flags:
- re.I(re.IGNORECASE)忽略正则表达式的大小写
- re.M (re.MULTILINE)在非多行模式下只会匹配第一行;多行模式下**,
^
和$
还会分别匹配每一行**(like “Line1\nLine2\nLine3”),并允许.匹配换行符。 - re.S (re.DOTALL)让.可匹配换行符
re.match()从开始位置进行pattern匹配,其他同search
re.fullsearch()整个字符串是否匹配
re.findall() 以顺序列表返回全部的匹配字符串
1 | improt re |
re.finditer()返回所有符合匹配的迭代match
1 | import re |
上面这些参数都是一样的
re.split(pattern,string,massplit=0,flags=0)
按照正则表达式匹配结果分割(依次拿出符合的字符串,达到分隔次数就停止,且注意最后若有其他字符的情况),返回列表
maxsplit:最大分割数,剩余部分作为最后一个元素输出1
2
3
4
5
6import re
re.split(r'\W+','Words, words, words.')
# [‘Words’, ‘words’, ‘words’, ‘’] 注意最后输出一个空字符串
re.split(r'\W+', 'Words, words, words.', 1)
# [‘Words’, ‘words, words.’]
# 如果pattern中捕获到括号,那么所有的组里的文字也会包含在列表里。
re.sub(pattern,repl,string,count=0,flags=0)替换匹配项
repl:注意其在第二个。用于替换的字符串
count:匹配的最大替换次数1
2
3
4
5import re
re.sub(r'[1-9]\d{5}',':zipcode','BIT100081 TSU100084 ')
'BIT:zipcode TSU:zipcode'
re.compile(pattern)
一个正则表达对象(正则对象),可多次复用提高效率1
2
3
4prog=re.compile(pattern)
result=prog.match(string)
# 即
result=re.match(pattern,string)
- .search(string[, pos[, endpos]])
- .match(string[, pos[, endpos]])
- .findall(string[, pos[, endpos]])
- .finditer(string[, pos[, endpos]])
- .split(string, maxsplit=0)
- .sub(repl, string, count=0)
endpos:从pos到endpos-1的字符会被匹配;endpos<pos,返回None
pattern.search(string,0,50) 等价于pattern.search(string[:50],0)。
match对象:
start()
、end()
: 其在原始字符串中的开始和结束位置的索引span()
: 匹配字符串开始和结束位置的索引 (start(), end() )groups()
: 包含所有匹配子字串的元组。groups(n)则返回第n个被捕获的子字符串
group()
: 被匹配的整个字符串=groups(0)
1 | improt re |
此处参考:
python基础—re模块下的函数及匹配对象的属性与方法(re.match()/re.search()…等)
规则基础:菜鸟教程-正则表达式