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'

 

 

   

 

posted @ 2018-01-09 11:35  了不起的小白  阅读(185)  评论(0编辑  收藏  举报