栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python爬虫正则表达式(python正则表达式或者用法)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python爬虫正则表达式(python正则表达式或者用法)

文章目录

一、正则表达式中元素二、python中正则表达式用法(re)

一、正则表达式中元素

  正则表达式是一个特殊的字符序列,它能帮助我们方便的检查一个字符串是否与某种模式匹配。Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式
  在正式接触re模块前,先了解与正则表达式相关的一些辅助字符:原子、元字符、(非)贪婪量词、锚位、择一匹配、分组等。

原子:正则表达式中实现匹配的基本单位,也称字符;

原子表(仅匹配一个)含义
d匹配任意一个数字,等价于字符集[0-9]
s匹配任意一个空白符,等价于字符集[tnrf ]
w匹配任意一个数字、字母和下划线,等价于[A-Za-z0-9_]
D匹配非数字字符
S匹配非空白字符
W匹配非单词字符

元字符:正则表达式中具有特殊含义的字符;

(贪婪)数量元字符含义贪婪量词含义
星号(*)匹配符号前面的条目0~任意次*?匹配的字符串越短越好
.*匹配任意字符0~任意次(换行符除外).*?匹配的字符串越短越好
加号(+匹配符号前面的条目1~任意次+?匹配的字符串越短越好
问号(?)匹配符号前面的条目0~1次??优先考虑0次的情况
花括号({ })指定具体的重复次数范围{ }?
{n,m}匹配n ~ m个{n,m}?优先匹配n次的情况
{n}匹配 n 个
{n,}匹配 n ~ 任意个{n,}?优先匹配n次的情况
{,m}匹配 0 ~ m个{,m}?优先匹配0次的情况

锚位:主要用来锁定被收索的字符串首尾,

锚位字符含义
脱字符(^),锚位A表示字符串开头锚位(在字符集方括号中做取反用)
美元符($),锚位z表示字符串结尾锚位

【注】:python的正则表达式(字符)基础语法与perl的大致相同,详细语法规则参考perl的正则表达式语法介绍

二、python中正则表达式用法(re)

  re 模块使 Python 语言拥有全部的正则表达式功能,他提供了多种正则表达式处理函数以方便我们使用:

re.compile() 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。re.match() 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 None。re.search() 扫描整个字符串并返回第一个成功的匹配。re.sub() 用于替换字符串中的匹配项。re.findall() 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。re.finditer() 和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。re.split() 方法按照能够匹配的子串将字符串分割后返回列表。

【注】:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配;
【注】:match 和 search 是匹配一次,findall 匹配所有。

#!/usr/bin/python

import re

#(一)、compile()函数——将正则表达式转换成内部格式,提高代码执行效率
str="python666java"

#pat=r"d+"
pat=re.compile(r"Python", re.I)                   #模式修正符——忽略大小写(re.I)

#print(re.search(pat,str))                        #效率低
print(pat.search(str))                            #效率较高

#(二)、match()/search()函数——匹配开头/匹配任意位置,单次匹配,匹配到之后就不会再进行匹配了
str1="pythonjavahtmljs"
str2="javapythonjavahtmljs"

pat1=re.compile(r"java")

print(pat1.match(str1))                            #匹配开头,匹配不到返回None,str1开头为python
   #打印:None
print(pat1.match(str2).group())                    #group()返回匹配到的内容 
   #打印:Java

print(pat1.search(str1).group())                   #匹配任意位置
   #打印:Java

#(三)、findall()函数——查找所有匹配的内容,返回到一个列表中
str3="hello....hello----hello------hello--hello----hello"

pat3=re.compile(r"hello")

print(pat3.findall(str3))
   #打印:["hello","hello","hello","hello","hello","hello"]

#(四)、finditer()函数——查找所有匹配的内容,装到一个迭代器中(效率高于findall())
str4="hello....hello----hello------hello--hello----hello"

pat4=re.compile(r"hello")

data=pat4.finditer(str4))

list1=[]
for i in data:
	list1.append(i.group())
print(list1) 
   #打印:["hello","hello","hello","hello","hello","hello"]

#(五)、split()函数——按照能够匹配的子串将字符串分割后返回列表
str5="Tom,,,,Bob,,,,,,john,,bill"

pat5=re.compile(r",+")                            

result=pat5.split(str5)
print(result)
   #打印:["Tom","Bob","John","Bill"]

#(六)、sub()函数——用于替换指定的目标字符串
str6="hello 123, hello 456!"

pat6=re.compile(r"d+")

result1=pat6.sub("666",str6)
print(result1)
   #打印:hello 666, hello 666!

参考:https://www.runoob.com/python/python-reg-expressions.html

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/772418.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号