python爬虫基础知识—05正则表达式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yulizan9165/article/details/89197840

python爬虫慕课整理https://www.cnblogs.com/beiyin/p/9129443.html

正则表达式 regular expression regex RE
正则表达式是用来简洁表达一组字符串的表达式
'PN' 'PYN' 'PYTHN' 'PYTHON'   正则表达式 P(Y|YT|YTH|YTHO)?N
优势:简洁,一行胜千言
示例:
(1)'PY' 'PYY' 'PYYY' 'PYYYYY' …………
(2)'PY'开头,后续存在不多于10个字符,后续字符不能是'P' 或 'Y'  用正则表达式表示 PY[^PY]{0,10}
1、概念
通用的字符串表达框架
简洁表达一组字符串的表达式
针对字符串表达“简洁”和“特征”思想的工具
判断某字符串的特征归属

2、作用
表达文本类型的特征(病毒、入侵等)
查找或替换一组字符串
匹配字符串的全部或部分

3、使用
编译:将符合正则表达式语法的字符串转换成正则表达式特征
4、语法
 P(Y|YT|YTH|YTHO)?N
 正则表达式由字符和操作符构成
 https://blog.csdn.net/Goallow/article/details/82250442
 https://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html
 
  P(Y|YT|YTH|YTHO)?N        'PN' 'PYN' 'PYTH' 'PYTHON'
  PYTHON+                    'PYTHON' 'PYTHONN' 'PYTHONNN' ....
  PY[TH]ON                    'PYTON' 'PYHON'
  PY[^TH]?ON                'PYON' 'PYaON' 'PYbON'  'PYcON' .....
  ^[A-Za-Z]+$  由26个字母组成的字符串
  ^[A-Za-z0-9]+$ 由26个字母和数字组成的字符串
  ^-?\d+$    整数形式的字符串
  [1-9]\d{5}    中国境内邮政编码,6位
  [\u4e00-\u9fa5] 匹配中文字符
  \d{3}-\d{8}|\d{4}-\d{7} 国内电话号码 010-12345678   010-1234-5678
  
  匹配ip地址的正则表达式(ip地址分4段,每段0-255)
  \d+.\d+.\d+.\d+
  \d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
  精确写法 0-99: [1-9]?\d  100-199:1\d{2}
  200-249:2[0-4]\d 250-255:25[0-5]
  (([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])
  
5、re库介绍
re库是python标准库,主要用于字符串的匹配
import re
raw string 类型(原生字符串类型)
re库采用raw string类型表示正则表达式,表示为r'text' r'[1-9]\d{5}'
正则表达式的表达类型
raw string类型(原生字符串类型)
string类型,更繁琐

6、re库主要功能函数
https://www.cnblogs.com/beiyin/p/9129604.html

re.search(pattern,string,flag=0) 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
-pattern:正则表达式的字符串或原生字符串表示
-string:待匹配字符串
-flags:正则表达式使用时的控制标记
flags:正则表达式使用时的控制标记
常用标记
re.I 忽略正则表达式的大小写,[A-Z]能够匹配小写字符
re.M (异或)正则表达式中的^操作符能够将给定字符串的每行当作匹配开始
re.S 正则表达式中的.操作符能够匹配所有字符,默认匹配除换行外的所有字符

re.match(pattern,string,flags=0)
从一个字符串的开始位置起匹配正则表达式,返回match对象  
import re
match=re.match(r'[0-9]\d{5}','100081 bit')
if match:
    print(match.group(0))
    
re.findall(pattern,string,flags=0)
搜索字符串,以列表类型返回全部能匹配的子串
-pattern:正则表达式的字符串或原生字符串表示
-string:待匹配字符串
-flags:正则表达式使用时的控制标记
import re
ls=re.findall(r'[1-9]\d{5}','bit100081 tsu 100084')
print(ls)
  
re.split(pattern,string,maxsplit=0,flags=0)
将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
-pattern:正则表达式的字符串或原生字符串表示
-string:待匹配字符串
-maxsplit:最大分割数,剩余部分作为最后预感元素输出
-flags:正则表达式使用时的控制标记
  
import re
ls=re.split(r'[0-9]\d{5}','bit100081 stu100081',maxsplit=1)
print(ls)
  
re.finditer(pattern,string,flags=0)
搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match
-pattern:正则表达式的字符串或原生字符串表示
-string:待匹配字符串
-flags:正则表达式使用时的控制标记 
import re
for m in re.finditer(r'[0-9]\d{5}','bit100081 stu100081'):
    if m:
        print(m.group())

re.finditer(pattern,string,flags=0)
在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
-pattern:正则表达式的字符串或原生字符串表示
-repl:替换匹配字符串的字符串
-string:待匹配字符串
-flags:正则表达式使用时的控制标记 
import re
a=re.sub(r'[0-9]\d{5}',':zipcode','bit100081 stu100081')
print(a)
  
regex=re.compile(pattern,flags=0)
将正则表达式的字符串形式编译成正则表达式对象
-pattern:正则表达式的字符串或原生字符串表示
-flags:正则表达式使用时的控制标记 
regex=re.compile(r'[0-9]\d{5}')
plt=regex.match('bit100081 stu100084')
  
7、re中的match对象
https://blog.csdn.net/wjhsg/article/details/81072134
https://blog.csdn.net/mycar001/article/details/78433947
match对象的属性
.string 待匹配的文本
.re 匹配时使用的pattern对象(正则表达式)
.pos 正则表达式搜索文本的开始位置
.endpos 正则表达式搜索文本的结束位置
import re
m=re.search(r'[0-9]\d{5}','BIT100081 TSU100084')
print(m.string)
print(m.re)
print(m.pos)
print(m.endpos)
print(m.group(0))
print(m.start())
print(m.end())


8、Re库的贪婪匹配和最小匹配
match=re.search(r'PY.*N','PYANBNCNDN')
match.group(0)
贪婪匹配:re库默认采用贪婪匹配,即输出匹配最长的子串
最小匹配
输出最短的子串match=re.search(r'PY.*?N','PYANBNCNDN')
https://blog.csdn.net/paleyellow/article/details/81506265


  
  
  
  

猜你喜欢

转载自blog.csdn.net/yulizan9165/article/details/89197840
今日推荐