爬虫 正则表达式,菜鸟教程 python 正则表达式
本文前言正则表达式模块Python正则表达式正则表达式函数findall()函数search()函数split()函数sub()函数元字符列表符号转义符任意符号起始符结束符星号加字符符号或字符的集合特殊序列指定的字符指定的起始和结束匹配中间字符匹配数字匹配非数字空格匹配非空格匹配任意数字和字母匹配任意非数字和字母结束集说明符范围匹配任意小写字母匹配对象跨度函数字符串函数函数组函数
我在基础专栏里讲过这个序言。我为什么要在这个专栏里拿出来?说明我们爬行动物需要利用规律性。如果你看不懂本专栏的内容,你需要看我的基础专栏,好好学一学:python全栈基础专栏中正则表达式的作用是什么?我们的网页中抓取的内容很多,我们不可能全部获取,只需要其中的一部分,所以需要利用规律性来匹配我们想要的。
正则表达式模块Python有一个名为re的内置包,可以用来处理正则表达式。导入re模块:
进口re
Python中的正则表达式导入re模块后,就可以开始使用正则表达式了。
例如:搜索一个字符串,查看它是否以“The”开头,以“Spain”结尾:
进口re
txt=西班牙的雨
x=re.search(^The.*西班牙$ ,txt)
如果x:
打印(匹配成功!)
否则:
打印(“匹配失败”)运行:
当然,你现在还不能理解这个例子。既然手把手教不会教你如何取得成功。
正则表达式函数
函数的作用是:返回所有匹配的列表。
例如,打印所有匹配的列表。
进口re
Txt=川川菜鸟,菜鸟
X=re.findall(菜鸟,txt)
打印(x)运行返回:
该列表按找到的顺序包含匹配项。如果没有找到匹配项,则返回一个空列表:
进口re
Txt=菜鸟不做饭
X=re.findall(川川,txt)
打印(x)
如果(x):
打印(“匹配成功”)
否则:
打印(我找不到这个!)跑回来:
Search()函数这个search()函数在一个字符串中搜索一个匹配项,如果有匹配项,它返回一个Match对象。如果有多个匹配项,则只返回第一个匹配项。
例如:搜索字符串中的第一个空白字符:
进口re
Txt=菜鸟在哪里
x=重新搜索( \s ,txt)
Print(第一个空格字符在位置:,x.start())运行结果:
如果找不到匹配项,None将返回以下值:
进口re
Txt=一个菜鸟在天上飞
X=re.search(川川,txt)
打印(x)返回:
Split()函数这个split()函数返回一个列表,其中的字符串在每次匹配时都被拆分。
例如:在每个空白字符处拆分。
进口re
Txt=新手学python
x=re.split(\s ,txt)
打印(x)运行返回:
您可以通过指定maxsplit参数来控制出现的次数
例如:仅在第一次出现时拆分字符串:
进口re
#在第一个空白字符处拆分字符串:
Txt=飞行新秀
x=re.split(\s ,txt,1)
打印(x)返回:
Sub()函数这个sub()函数用你选择的文本替换匹配项。
例如,只需将其替换为
进口re
Txt=学python找川川菜鸟
x=re sub( just , only ,txt)
打印(x)运行:
您可以通过指定count参数来控制替换的数量:
例如,替换前两个事件:
进口re
Txt=学了python就成了川川菜鸟
x=re sub( just , only ,txt,2)
打印(x)返回:
列表符号[]用于一组字符
例如:#按字母顺序查找“a”和“m”之间的所有小写字符
进口re
txt=苹果川川
#按字母顺序查找“a”和“m”之间的所有小写字符
x=re.findall([a-m],txt)
打印(x)运行:
转义字符* *表示特殊序列(也可用于转义特殊字符)
例如,匹配所有数字:
进口re
Txt=我今年20岁
#查找所有数字字符
x=re.findall(\d ,txt)
打印(x)运行返回:
任何符号。可以使用任何字符(除了换行符)。
例如:搜索以“he”开头,后跟两个(任意)字符和一个“O”的序列
进口re
txt=hello world
#搜索以“he”开头,后跟两个(任意)字符和一个“o”的序列
x=re.findall(he.o ,txt)
打印(x)运行返回:
开始符号用于匹配开始。
进口re
Txt=川川菜鸟在飞
X=re.findall(传,txt)
如果x:
打印(“哇,我找到匹配的了”)
否则:
打印(哎呀,无法匹配)运行:
end $符号用于匹配结尾,例如,匹配字符串是否以“world”结尾
进口re
txt=hello world
#匹配字符串是否以“world”结尾
x=re.findall(world$ ,txt)
如果x:
打印(“匹配成功”)
否则:
打印(“不匹配”)运行:
星号星号用于匹配零个或多个事件。进口re
Txt=一个菜鸟在天上飞。‘学python找川川菜鸟!’
#检查字符串是否包含“ai”后跟0个或多个“X”字符:
X=re.findall(菜鸟* ,txt)
打印(x)
如果x:
打印(匹配!)
否则:
Print(气得我都配不上)运行:
加号用于匹配一个或多个事件。
例如:检查字符串是否包含后跟1个或多个“菜鸟”字符的“菜鸟”:
进口re
Txt=它在飞,菜鸟们!
#检查字符串是否包含后跟1个或多个“菜鸟”字符的“菜鸟”:
X=re.findall(菜鸟,txt)
打印(x)
如果x:
打印(匹配!)
否则:
打印(烦死了,比不上)运行:
精确指定的符号集合{ 0 }的出现次数。
例如,检查字符串是否包含“川”
进口re
Txt=川川菜鸟不是菜!
#检查字符串是否包含两个"川"
X=re.findall (Chuan {2} ,txt)
打印(x)
如果x:
打印(“四川匹配两次”)
否则:
打印(配不上,帅哥)返回:
Or 匹配其中任何一个。
比如:配弦,菜鸟还是我。
进口re
Txt=菜鸟们学会python了吗?‘弦也是菜鸟!’
X=re.findall(菜鸟是我,txt)
打印(x)
如果x:
打印(匹配!)
否则:
打印(“匹配失败”)运行:
Specify character \A:如果指定的字符位于字符串的开头,则返回一个匹配项。
例如,匹配以dish字符开头的字符。
进口re
Txt=菜鸟来了
x=re . find all( \一道菜,txt)
打印(x)
如果x:
打印(“是的,匹配”)
否则:
打印(“不匹配”)运行:
指定开头和结尾\b返回指定字符位于单词开头或结尾的匹配项(开头的“r”确保该字符串被视为原始字符串)。
比如:匹配爱情的开始
进口re
Txt=爱你,川川
X=re.findall(r\b love ,txt)
打印(x)
如果x:
打印(“匹配”)
否则:
打印(“不匹配”)运行:
再比如:配川末
进口re
Txt=爱你,川川
X=re.findall(r chuan \b ,txt)
打印(x)
如果x:
打印(“匹配”)
否则:
打印(“不匹配”)运行:
匹配中间字符\B返回与指定字符匹配但不在单词开头(或结尾)的字符(开头的“r”确保该字符串被视为原始字符串)。
比如我匹配菜鸟:
进口re
Txt=我是菜鸟,我是菜鸟
#检查“ain”是否存在,但不在单词的开头:
X=re.findall(r\菜鸟,txt)
打印(x)
如果x:
打印(‘匹配!)
否则:
打印(不匹配!)运行:
但是如果你匹配结束,它将返回空。例如,我匹配这只鸟:
进口re
Txt=川川新秀
#检查“bird”是否存在,但不在单词末尾:
X=re.findall(r bird \B ,txt)
打印(x)
如果x:
打印(“匹配”)
否则:
打印(“未找到”)运行:
匹配数字\d返回包含匹配数字(0到9之间的数字)的字符串。
例如:
进口re
Txt=我今年20岁
#检查字符串是否包含任何数字(数字0-9)
x=re.findall(\d ,txt)
打印(x)
如果x:
打印(“哇,哇,它匹配的数字”)
否则:
打印(找不到)运行:
匹配非数字\D返回的字符串不包含匹配的数字。
例如:
进口re
Txt=我20岁
#匹配任何非数字符号
x=re.findall(\D ,txt)
打印(x)
如果x:
打印(匹配,快乐!)
否则:
打印(无法匹配,愤怒)运行:
Match \s返回其匹配字符串包含空白字符的匹配项。
例如:
进口re
Txt=我是川川菜鸟
#匹配任何空格字符
x=re.findall(\s ,txt)
打印(x)
如果x:
打印(“匹配”)
否则:
打印(“不匹配”)运行:
Match non-space \S返回其字符串不包含空格字符的匹配项。
进口re
Txt=我是菜鸟
#匹配任何非空字符
x=re.findall(\S ,txt)
打印(x)
如果x:
打印(匹配!)
否则:
打印(“不匹配”)运行:
匹配任意数字和字母返回字符串包含任意单词字符(从A到Z的字符、从0到9的数字和下划线_字符)的匹配项
例如:
进口re
Txt=菜鸟是一串
#返回每个单词中的匹配字符(字符从A到Z,数字从0到9),以及下划线_字符):
x=re.findall(\w ,txt)
打印(x)
如果x:
打印(“匹配”)
否则:
打印(“无法匹配wow”)运行:
匹配任何不包含任何单词字符的非数字和字母返回字符串,并返回每个非单词字符(不在A和Z之间的字符)的匹配项。"!","?"空白等。)
例如:
进口re
Txt=菜鸟是我吗?我不信!
#返回每个非单词字符(不在A和z之间的字符)中的匹配项。"!","?"空白等。):
x=re.findall(\W ,txt)
打印(x)
如果x:
打印(匹配!)
否则:
打印(“不匹配”)运行:
Match \Z如果指定的字符位于字符串的末尾,则返回一个匹配项。
例如:
进口re
Txt=川川是菜鸟
X=re.findall (ah \Z ,txt)
打印(x)
如果x:
打印(匹配!)
否则:
打印(“不匹配”)
说明符范围匹配,如set: [arn]
进口re
txt=西班牙的雨
x=re.findall([arn],txt)
打印(x)
如果x:
打印(匹配!)
否则:
打印(“不匹配”)
match lower case letters in any range返回A和N之间按字母顺序排列的任何小写字符的匹配项。
例如:
进口re
txt=你好,我的世界
x=re.findall([a-n],txt)
打印(x)
如果x:
打印(匹配!)
否则:
打印(“不匹配”)运行:
同理,其他情况如下:
[arn]返回除A、R和n之外的任何字符的匹配。
[0123]返回存在任何指定数字(0、1、2或3)的匹配。
[0-9]返回0到9之间任何数字的匹配。
[0-5][0-9]返回从00到59之间的任何两位数匹配。
[a-zA-Z]按字母顺序返回A和Z之间任何字符的匹配,小写或大写。
集合中的[],*,、()、$、{}没有特殊含义,所以[]的意思是:返回字符串中任意字符的匹配。让我给你举个例子:
进口re
txt=5 6=11
#检查字符串是否有任何字符:
x=re.findall([ ],txt)
打印(x)
如果x:
打印(“匹配”)
否则:
打印(“不匹配”)运行:
匹配对象匹配对象是包含搜索和结果信息的对象。注意:如果没有匹配,None将返回值而不是匹配对象。
举个直接的例子:
执行返回匹配对象的搜索。
进口re
#search()函数返回一个匹配对象:
txt=hello world
x=搜索( wo ,txt)
打印(x)运行:
Match对象具有用于检索搜索和结果信息的属性和方法:
Span()返回一个包含匹配的开始和结束位置的元组。
String返回传递给函数的字符串。
Group()返回字符串的匹配部分。
Span函数例如:打印第一个匹配的位置(开始和结束位置)。正则表达式查找任何以大写字母“s”开头的单词:
进口re
#搜索单词开头的大写字母“S ”,并打印其位置
txt=西班牙的雨
x=re.search(r\bS\w ,txt)
Print(x.span())运行:
字符串函数例如:打印传递给函数的字符串。
进口re
#返回字符串
txt=西班牙的雨
x=re.search(r\bS\w ,txt)
打印(x.string)
例如:打印字符串的匹配部分。正则表达式查找任何以大写字母“s”开头的单词
进口re
#搜索单词开头的大写字母“W ”,并打印单词:
txt=hello world
x=re.search(r\bw\w ,txt)
Print(x.group())运行:
注意:如果没有匹配,None将返回值而不是匹配对象。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。