python 正则表达式整理
最近有个任务去匹配网页代码中的图片url,虽然可以用beautifulsoup()来过滤,但是也可以用正则来处理。
对于正则,能够根据查找的资料写出来,不熟练不说,对re模块的函数没有弄清楚,在这里进行统一的整理。
1.re.match(pattern, string, flags=0) 是从起始位置进行匹配,如果匹配不到就返回None 一般来说是和group()结合使用
import re print(re.match('www', 'www.runoob.www').group()) # 在起始位置匹配 print(re.match('com', 'www.runoob.com')) # 在起始位置匹配,没有匹配到
返回结果
www
None
第2个返回None时,如果后面是.group()是会报错的
-------------------------------------------------------------------------------------------------------------------------------------------------------
同理:re.search(pattern, string, flags=0)也是这么用的
import re print(re.search('run', 'www.runoob.www').group()) # 不限定位置 print(re.findall('w', 'www.runoob.com')) # 不在起始位置匹配
结果:
run ['w', 'w', 'w']
2.re.compile(pattern, flags=0) 编译
一般写完正则后都会编译一下,这是为了不重复编译,让检索符合格式的字符串的速度更快,这里跟findall 结合举例:
import re text = "jsjsdjj123kdfksdfjsk123AA**sdjfks" p = r"[a-zA-Z]" pattern = re.compile(p) # last_str = pattern.findall(text) 返回的结果和下方返回的结果是一样的 返回一个list last_str = re.findall(pattern, text) print(last_str)
返回结果:
['j', 's', 'j', 's', 'd', 'j', 'j', 'k', 'd', 'f', 'k', 's', 'd', 'f', 'j', 's', 'k', 'A', 'A', 's', 'd', 'j', 'f', 'k', 's']
3. re.sub(pattern, repl, string, count=0, flags=0) 可以替换(过滤)字符串中的符合pattern的字符
import re print(re.sub('[a-zA-Z]','','ss223sss224eeerw'))
结果:223224
4.字符集 字符集可以匹配它所包含的任意字符,所以[pj]yton可以匹配python jython python。你可以使用范围,比如[a-z]能够匹配任意字母
为了反转字符集,可以在开头使用^字符,比如'[^abc]'可以匹配除了a、b、c之外的字符。
5. re.escape(string)超实用,它可以对字符串中所有可能被解释为正则运算符的字符进行转义('\')。如果字符串很长且包含很多特殊字符,而你又不想输入一大堆反斜线,或者
字符串来自于用户,且要作为正则表达式的一部分的时候,可以使用这个函数。
>>> re.escape('www.baidu.com') 'www\\.baidu\\.com'