手机版

详细讲解Python正则表达式模块

时间:2021-08-29 来源:互联网 编辑:宝哥软件园 浏览:

最近需要用爬虫抓取数据进行测试,于是开始了爬虫的填坑之旅。首先,我们应该系统地学习关于规律性的知识。因此,整理出以下规律性的知识点。区域设置是Python。主要讲解Python的Re模块。

我将主要列出下面的一些语法,剩下的可以直接在python官网查阅:docs.python.org/3/library/r…

一、基本语法总结

1.1.匹配单个字符

a。\d \D \w \W \s \S [.] [^.]

匹配单个字符(。)

规则:匹配除换行符以外的任何字符

在[24] : re。在[24] : ['foo ',' FAO']中查找所有匹配任何(非)数字字符(\d \D)

\d [0-9]\D [^0-9]

匹配任何(非)普通字符(\w \W)

\ n常用字符包括[_0-9A-Za-z]和汉字\ n非常用字符

匹配任何(非)空字符(\s \S)

\删除任何空字符[\ r \ n \ t] \删除任何非空字符

匹配字符集([.])

[A-Z][a-z][0-9][_123a-z]

匹配字符集([.])

规则:除了列出的字符之外,字符集不是任何字符

[^abc] -除了公元前的任何人物

1.2、匹配多个字符

*匹配0次以上,匹配1次以上?匹配0次或1次{m}匹配m次{m,n}在从m次到n次的时间间隔内匹配任何时间

1.3、匹配位置

匹配开始位置$匹配结束位置\A匹配开始位置\Z匹配结束位置\b匹配单词边界位置(一般用于匹配大写字母)\B匹配非单词边界问题

1.4.逃跑

正则表达式中有一类需要转移的特殊字符,只需要在特殊字符之间加\来表示转移即可。* ?^ $ [] {} () | \

1.5.子群

使用()为正则表达式建立内部分组。子群是正则表达式的一部分,可以看作是一个内部整体。

在[61]: re . search(r '(https | http | FTP): \/\/\ w \。\w \。(com|cn)',https://www.baidu.com ')。group(0)out[61]: ' https://www . Baidu.com ' in[62]: re . search(r '(https | http | FTP): \/\/\。

正则表达式的重复匹配总是尽可能向后匹配更多的内容。贪婪模式包括:*?{m,n}

非贪婪模式:匹配内容越少越好,贪婪模式转换为非贪婪模式:*?{m,n}?

在[106]: re.findall(r'ab?' abbbbbbb ')Out[106]:[' ab ']In[107]: re . findall(r ' ab?',' abbbbbbb ')Out[107]:[' a ']ii。Re模块

接下来,我的所有函数中的参数解释如下:

模式:正则表达式字符串:目标字符串pos:截取目标字符串开始位置endpose:截取目标字符串结束位置flags:函数标志replaceStr:替换字符串max:最多替换多少个位置(默认全部替换)

从上图可以看出,Python中re模块、regex对象和match对象之间存在一定的关系。

1.re模块编译方法返回一个regex对象2。re模块和regex对象的finditer()、fullmatch()、match()和search()方法返回一个match对象3。它们分别有自己的性质和方法

2.1、编译

Regex=re。编译(模式,标志=0) #生成正则表达式对象2.2,findall

Re。findall(模式、字符串、位置、结束位置)#匹配目标字符串中所有符合条件的内容2.3,拆分

Re。split(模式、字符串、标志)#根据正则表达式拆分目标字符串

In [79]: re.split(r'\s ',' Hello World ')Out[79]:[' Hello ',' World']2.4,sub

re.sub(模式,替换字符串,字符串,最大值,标志)In [80]: re.sub(r'\s ',' # ',' hello world ')Out[80]: ' hello # # world ' 2.5,subn

re的作用。subn(模式、replacestr、字符串、最大值、标志)#与sub相同,但返回值返回被替换的字符串和几个替换项

In [80]: re.sub(r'\s ',' # ',' hello world ')Out[80]:(' hello # # world ',1)2.6、finditer

Re。Finder (pattern,string) #用正则表达式匹配目标字符串,并返回一个match对象,该对象只能在调用group()后获取值

在[87]:中它=re.finditer(r'\d ',' 2014年第08期傲云512地镇')在[88]:中为我在里面:打印(一). _sre .0x7f0639767920_sre处的SRE _匹配对象0x7f0639767ac0_sre处的SRE _匹配对象SRE _匹配对象在0x7f 0639767920 In[93]: it=re。' finditer(r ' \ d ',' 2014年第08期傲云512期第珍')在[94]:为我在里面:打印(i.group()).完全匹配

完全匹配(模式、字符串、标志)#完全匹配目标字符串,相当于加了^ 和$

2.8、匹配

重新匹配(模式、字符串、标志)#匹配目标字符串开头的位置

2.9、搜索

重新搜索(模式、字符串、标志)#正则表达式匹配目标字符串,只匹配第一处

三、一些练习题

3.1、匹配首字母大写的单词

import ref=open(' test。txt ')模式=r ' \ b[A-Z][A-zA-Z]* \ S * ' #模式=r ' \ b[A-Z]\ S ' L=[]为I in f : L=re。findall(模式,I)打印(L)测试. txt文档内容如下:

你好世界-12.6你好吗-121.24丹麦克朗,34%,占比1/22003 - 2005./%3.2、匹配数字(正数、负数、小数、百分数、分数)

import repattern='-?\d ((/?\d )|((\ .)?\d )|((\%)?))' f=打开('测试。txt ')l=[]表示f:中的行l=re.finditer(模式,行)表示l:打印中的一(第一组)总结

以上所述是小编给大家介绍的计算机编程语言正则表达式模块,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

版权声明:详细讲解Python正则表达式模块是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。