本文说明了Python爬虫正则表达式的基本用法。分享给大家参考,如下:
一.导言
正则表达式,又称正则表达式、正则表达式、正则表达式和常规表达式(英语:正则表达式,在代码中常缩写为regex、regexp或re),是计算机科学的一个概念。正则表达式使用单个字符串来描述和匹配一系列符合特定语法规则的字符串。在许多文本编辑器中,正则表达式通常用于检索和替换符合特定模式的文本。
编译函数基于模式字符串和可选标志参数生成正则表达式对象。这个对象有一系列正则表达式匹配和替换的方法。
二、使用方法
1.简单看看文字
函数语法:
re的参数描述。match(模式、字符串、标志=0)函数:
参数描述要由模式匹配的正则表达式字符串匹配的字符串。flags标志用于控制正则表达式的匹配方式,如区分大小写、多行匹配等。re.match方法返回匹配的对象,否则返回None。
我们可以使用group(num)或groups()匹配对象函数来获得匹配表达式。
matching object方法描述由group(num=0)匹配的整个表达式的字符串。Group()可以一次输入多个组号,在这种情况下,它将返回一个包含对应于这些组的值的元组。Groups()返回包含所有组字符串的元组,从1到包含的组号。import rep=re.compile(' ABCD ')print(type(p))# class ' _ sre。SRE _ Pattern ' print(dir(p))#[' __ class _ _ ',' __copy__ ',' __deepcopy__ ',' __delattr__ ',' __dir__ ',' __doc__ ',' __eq_ ',' __format__ ',' __ge__ ',' __getattribute_ ',' __gt_ ',' __hash_ ',' __init_ ',' __le_ ',' __lt__ ',' _ _ 'SRE _ Match ' print(dir(m))#[' __ class _ _ ',' __copy__ ',' __deepcopy__ ',' __delattr__ ',' __dir__ ',' __doc__ ',' __eq_ ',' __format__ ',' __ge__ ',' __getattribute_ ',' __gt_ ',' __hash_ ',' __init_ ',' __le_ ',' __lt__ ',' _ _ '
import rep=re.compile(' ABCD ')m=p . match(' Abd cef ')print(m . group())#属性错误:“none type”对象没有属性“group”神奇。
Import rep=re.compile(' . ')m=p . match(' Abd cef ')print(m . group())#一个特殊字符(元字符)
注意:是里面转义词的意思。例如,您想要匹配一个重新编译('.'),还有这个。匹配任何字符。但我只想让它匹配一个。怎么办,重新编译(' . '),以至于真的只匹配一个点。
re.findall()
Import rep=re.compile(' . ')#匹配符号点(注意转义符可以加在它前面,所以它不匹配任何字符)m=p. findall ('ABC。def。)print(type(m))# class ' list ' print(m)#[' . ')
贪婪模式和非贪婪模式
1、一个小例子
我们知道*意味着匹配字符串0次或更多次,但匹配字符串1次或更多次。因此,当*匹配0次时,会打印出来,只找到匹配一次的字符。
import rep=re.compile('[ABC]')m=p . findall(' abcdef ')print(m)# * #[' ABC ','','','','',' ']#[' ABC ']贪婪和非贪婪模式会影响由量词修改的子表达式
在整个表达式匹配成功的前提下,非贪婪模式尽量少匹配。
2、{}
根据下面的示例,不难看出量词{m}代表几个与前面字符串匹配的字符串
import rep=re.compile('[ABC]{ 3 } ')m=p . find all(' abcdabacd ')print(m)# { 1 } #[' a ',' b ',' c ',' a ',' b ',' c'] #。
Re.search会扫描整个字符串并返回第一个成功匹配的字符串,否则会返回None(请注意,findall会返回list,而search会直接返回该字符串)
import rep=re.compile(' ABCD ')m=p . search(' ABCDABCD ')print(m . group())检索和替换
Python的re模块提供re.sub来替换字符串中的匹配项。
语法:
re的参数。sub(模式,repl,字符串,计数=0,标志=0):
模式:常规模式字符串。Repl :替换字符串,字符串也可以是函数。字符串:要搜索和替换的原始字符串。Count :是模式匹配后的最大替换次数。默认值0表示替换所有匹配项。例1:
替换一个#开头的所有字符(匹配任意字符0次或更多次),并替换为无。
Import rephone='2004-959-559 #这是一个外国电话号码' num=re。sub ('#。*、“、”电话)打印(号码)示例1:分机
查找所有非数字字符,''代表删除。
Import rephone='2004-959-559 #这是一个外国电话号码' num=re。sub (' d ','',phone) print (num)正则表达式修饰符-可选标志
正则表达式可以包含一些可选的标志修饰符来控制匹配模式。修饰符被指定为可选标志。可以通过按位“或”(|)来指定多个标志。例如re。我| re。m设置为I和m标志:
PS:这里有两个非常方便的正则表达式工具,供大家参考:
JavaScript正则表达式在线测试工具:http://tools.jb51.net/regex/javascript
在线正则表达式生成工具:http://tools.jb51.net/regex/create_reg
有关Python的更多信息,请参见本网站的主题:《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》和《Python文件与目录操作技巧汇总》
希望本文对Python编程有所帮助。