Python网络爬虫之正则表达式精讲
python 正则表达式判断

python 正则表达式判断摘要:1.Python 正则表达式的概念2.Python 正则表达式的语法3.Python 正则表达式的应用4.Python 正则表达式的判断方法正文:一、Python 正则表达式的概念正则表达式(Regular Expression,简称regex)是一种用于匹配字符串模式的字符集,通常用于文本搜索和数据提取等场景。
Python 作为一种广泛应用的编程语言,也提供了正则表达式的支持。
二、Python 正则表达式的语法Python 中的正则表达式主要通过`re`模块进行操作。
以下是一些常用的正则表达式语法:1.`.`:匹配任意字符(除了换行符)。
2.`*`:匹配前面的字符0 次或多次。
3.`+`:匹配前面的字符1 次或多次。
4.`?`:匹配前面的字符0 次或1 次。
5.`{n}`:匹配前面的字符n 次。
6.`{n,}`:匹配前面的字符n 次或多次。
7.`{n,m}`:匹配前面的字符n 到m 次。
8.`[abc]`:匹配方括号内的任意一个字符(a、b 或c)。
9.`[^abc]`:匹配除方括号内字符以外的任意字符。
10.`(pattern)`:捕获括号内的模式,并将其存储以供以后引用。
11.`|`:表示或(or),匹配两个模式之一。
三、Python 正则表达式的应用Python 正则表达式广泛应用于文本处理、数据分析等场景,例如:验证邮箱地址、提取网页链接、筛选特定字符等。
四、Python 正则表达式的判断方法在Python 中,我们可以使用`re`模块的函数来判断字符串是否符合正则表达式的规则。
以下是一些常用的判断方法:1.`re.match(pattern, string)`:从字符串的开头开始匹配,如果匹配成功则返回一个匹配对象,否则返回None。
2.`re.search(pattern, string)`:在整个字符串中搜索匹配,如果匹配成功则返回一个匹配对象,否则返回None。
Python正则表达式精确匹配手机号,邮箱,IP,身份证…..(爬虫利器)

Python正则表达式精确匹配手机号,邮箱,IP,身份证…..(爬虫利器)Python正则表达式大全1.检验手机号要求:手机号码必须为11位数字,以1开头,第二位为1或5或8。
import redef verify_mobile():mob = input('请输入手机号码:')ret = re.match(r'1[358]d{9}', mob)if ret:print('手机号码匹配正确')else:print('匹配错误')verify_mobile()2.检验邮箱import redef verify_email():email = input('请输入邮箱:')ret = re.match(r'^[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+){0,4}@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+){0,4}$', email)if ret:print('邮箱匹配正确')else:print('匹配错误')verify_email()3.验证身份证import redef verify_card():card = input('请输入身份证:')ret = re.match(r'^([1-9]d{5}[12]d{3}(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1])d{3}(d|X|x))$', card)if ret:print('身份证匹配正确')else:print('匹配错误')verify_card()4.检验年月日import redef verify_date():date = input('请输入年月日:')ret = re.match(r'^(d{4}-d{1,2}-d{1,2})$', date)if ret:print('日期匹配正确')else:print('匹配错误')verify_date()5.验证数字表达式匹配数字:^[0-9]*$匹配n位的数字:^d{n}$匹配零和非零开头的数字:^(0|[1-9][0-9]*)$匹配正数、负数、和小数:^(-|+)?d+(.d+)?$匹配非零的正整数:^[1-9]d*$ 或^([1-9][0-9]*){1,3}$ 或^+?[1-9][0-9]*$匹配非零的负整数:^-[1-9][]0-9″*$ 或 ^-[1-9]d*$匹配非负整数:^d+$ 或 ^[1-9]d*|0$匹配非正整数:^-[1-9]d*|0$ 或 ^((-d+)|(0+))$匹配浮点数:^(-?d+)(.d+)?$ 或^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$匹配正浮点数:^[1-9]d*.d*|0.d*[1-9]d*$匹配负浮点数:^-([1-9]d*.d*|0.d*[1-9]d*)$匹配非正浮点数:^((-d+(.d+)?)|(0+(.0+)?))$匹配非负浮点数:^d+(.d+)?$ 或^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$6.验证字符表达式匹配汉字:^[一-龥]{0,}$匹配英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$匹配大写英文字母组成的字符串:^[A-Z]+$匹配小写英文字母组成的字符串:^[a-z]+$匹配大小写英文组成的字符串:^[A-Za-z]+$匹配中文、英文、数字包括下划线:^[一-龥A-Za-z0-9_]+$禁止输入含有~的字符:[^~x22]+x。
Python系列之正则表达式详解

Python系列之正则表达式详解Python 正则表达式模块 (re) 简介Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,和 Perl 脚本的正则表达式功能类似,使⽤这⼀内嵌于 Python 的语⾔⼯具,尽管不能满⾜所有复杂的匹配情况,但⾜够在绝⼤多数情况下能够有效地实现对复杂字符串的分析并提取出相关信息。
Python 会将正则表达式转化为字节码,利⽤ C 语⾔的匹配引擎进⾏深度优先的匹配。
表 1. 正则表达式元字符和语法符号说明实例.表⽰任意字符,如果说指定了 DOTALL 的标识,就表⽰包括新⾏在内的所有字符。
'abc' >>>'a.c' >>>结果为:'abc'^表⽰字符串开头。
'abc' >>>'^abc' >>>结果为:'abc'$表⽰字符串结尾。
'abc' >>>'abc$' >>>结果为:'abc'*, +, ?'*'表⽰匹配前⼀个字符重复 0 次到⽆限次,'+'表⽰匹配前⼀个字符重复 1次到⽆限次,'?'表⽰匹配前⼀个字符重复 0 次到1次'abcccd' >>>'abc*' >>>结果为:'abccc''abcccd' >>>'abc+' >>>结果为:'abccc''abcccd' >>>'abc?' >>>结果为:'abc'*?, +?, ??前⾯的*,+,?等都是贪婪匹配,也就是尽可能多匹配,后⾯加?号使其变成惰性匹配即⾮贪婪匹配'abc' >>>'abc*?' >>>结果为:'ab''abc' >>>'abc??' >>>结果为:'ab''abc' >>>'abc+?' >>>结果为:'abc'{m}匹配前⼀个字符 m 次'abcccd' >>>'abc{3}d' >>>结果为:'abcccd' {m,n}匹配前⼀个字符 m 到 n 次'abcccd' >>> 'abc{2,3}d' >>>结果为:'abcccd' {m,n}?匹配前⼀个字符 m 到 n 次,并且取尽可能少的情况'abccc' >>> 'abc{2,3}?' >>>结果为:'abcc'\对特殊字符进⾏转义,或者是指定特殊序列 'a.c' >>>'a\.c' >>> 结果为: 'a.c'[]表⽰⼀个字符集,所有特殊字符在其都失去特殊意义,只有: ^ - ] \ 含有特殊含义'abcd' >>>'a[bc]' >>>结果为:'ab'|或者,只匹配其中⼀个表达式,如果|没有被包括在()中,则它的范围是整个正则表达式'abcd' >>>'abc|acd' >>>结果为:'abc' ( … )被括起来的表达式作为⼀个分组. findall 在有组的情况下只显⽰组的内容 'a123d' >>>'a(123)d' >>>结果为:'123'(?#...)注释,忽略括号内的内容特殊构建不作为分组 'abc123' >>>'abc(?#fasd)123' >>>结果为:'abc123'(?= …)表达式’…’之前的字符串,特殊构建不作为分组在字符串’ pythonretest ’中 (?=test) 会匹配’pythonre ’(?!...)后⾯不跟表达式’…’的字符串,特殊构建不作为分组如果’ pythonre ’后⾯不是字符串’ test ’,那么(?!test) 会匹配’ pythonre ’(?<=… )跟在表达式’…’后⾯的字符串符合括号之后的正则表达式,特殊构建不作为分组正则表达式’ (?<=abc)def ’会在’ abcdef ’中匹配’def ’(?:)取消优先打印分组的内容'abc' >>>'(?:a)(b)' >>>结果为'[b]'?P<>指定Key'abc' >>>'(?P<n1>a)>>>结果为:groupdict{n1:a}表 2. 正则表达式特殊序列特殊表达式序列说明\A只在字符串开头进⾏匹配。
python正则表达式

python正则表达式正则表达式应⽤场景特定规律字符串的查找替换切割等邮箱格式、url等格式的验证爬⾍项⽬,提取特定的有效内容很多应⽤的配置⽂件使⽤原则只要能够通过字符串等相关函数能够解决的,就不要使⽤正则正则的执⾏效率⽐较低,会降低代码的可读性世界上最难读懂的三样东西:医⽣的处⽅、道⼠的神符、码农的正则提醒:正则是⽤来写的,不是⽤来读的,不要试着阅读别⼈的正则;不懂功能时必要读正则。
基本使⽤说明:正则是通过re模块提供⽀持的相关函数:match:从开头进⾏匹配,找到就⽴即返回正则结果对象,没有就返回Nonesearch:匹配全部内容,任意位置,只要找到,⽴即返回正则结果对象,没有返回None# python依赖次模块完成正则功能import re# 从开头进⾏匹配,找到⼀个⽴即返回正则结果对象,没有返回Nonem = re.match('abc', 'abchelloabc')# 匹配全部内容,任意位置,只要找到,⽴即返回正则结果对象,没有返回Nonem = re.search('abc', 'helloabcshsjsldj')if m:print('ok')# 获取匹配内容print(m.group())# 获取匹配位置print(m.span())findall:匹配所有内容,返回匹配结果组成的列表,没有的返回⼀个空列表# 匹配所有内容,返回匹配结果组成的列表,没有返回Nonef = re.findall('abc', 'abcsdisuoiabcsjdklsjabc')if f:print(f)compile:根据字符串⽣成正则表达式的对象,⽤于特定正则匹配,通过match、search、findall匹配# 根据字符串⽣成正则表达式的对象,⽤于正则匹配c = pile('abc')# 然后进⾏特定正则匹配# m = c.match('abcdefghijklmn')m = c.search('abcdefghijklmn')if m:print(m)print(c.findall('abcueywiabcsjdkaabc'))将re模块中的match、search、findall⽅法的处理过程分为了两步完成。
Python网络爬虫的房地产行业数据获取与处理方法

Python网络爬虫的房地产行业数据获取与处理方法近年来,随着互联网的发展,房地产行业数据的获取与处理成为了许多人关注的焦点。
而Python网络爬虫作为一种高效、灵活的技术,被广泛运用于房地产数据的抓取和分析。
本文将介绍Python网络爬虫在房地产行业数据获取与处理中的应用方法,并分享一些实用的技巧和工具。
一、数据获取的基本流程1. 确定数据源在使用Python进行数据爬取之前,我们首先需要确定要获取数据的来源。
例如,我们可以选择房地产信息网站、房屋交易平台等作为数据源,以获取想要的房地产数据。
2. 分析网页结构在确定数据源之后,我们需要进一步分析网页的结构,以便正确地抓取所需的数据。
通常,我们可以使用浏览器开发者工具来查看网页源代码,并通过查找元素、观察网页结构等方式来获取有关数据的信息。
3. 编写爬虫程序在分析完网页结构后,我们可以使用Python的相关库,如BeautifulSoup、Scrapy等,根据网页结构编写爬虫程序。
通过模拟浏览器行为,我们可以实现数据的自动抓取、解析和存储等功能。
4. 数据存储与处理爬取到的数据通常以结构化的形式存在,例如CSV、JSON等。
我们可以使用Python的数据处理库(如Pandas)对数据进行清洗、筛选、分析等操作,以便得到我们想要的结果。
二、Python网络爬虫的工具与技巧1. 使用Requests库发送HTTP请求在进行数据爬取时,我们通常需要模拟浏览器发送HTTP请求,以获取网页内容。
Python的Requests库提供了简洁而强大的接口,可以方便地发送各种类型的请求,并得到相应的响应数据。
2. 使用BeautifulSoup库解析网页获取到网页内容后,我们需要对其进行解析,以便从中提取我们需要的数据。
BeautifulSoup库是Python中一个常用的HTML/XML解析库,可以帮助我们方便地提取网页中的各种信息。
3. 使用正则表达式进行数据提取有些情况下,网页的结构比较复杂,使用常规的解析库无法直接提取到目标数据。
python正则表达式详解

python正则表达式详解python 正则表达式详解1. 正则表达式模式模式描述^匹配字符串的开头$匹配字符串的末尾。
.匹配任意字符,除了换⾏符,当re.DOTALL标记被指定时,则可以匹配包括换⾏符的任意字符。
[...]⽤来表⽰⼀组字符,单独列出:[amk] 匹配 'a','m'或'k'[^...]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re*匹配0个或多个的表达式。
re+匹配1个或多个的表达式。
re?匹配0个或1个由前⾯的正则表达式定义的⽚段,⾮贪婪⽅式re{ n}匹配n个前⾯表达式。
例如,"o{2}"不能匹配"Bob"中的"o",但是能匹配"food"中的两个o。
re{ n,}精确匹配n个前⾯表达式。
例如,"o{2,}"不能匹配"Bob"中的"o",但能匹配"foooood"中的所有o。
"o{1,}"等价于"o+"。
"o{0,}"则等价于"o*"。
re{ n,m}匹配 n 到 m 次由前⾯的正则表达式定义的⽚段,贪婪⽅式a| b匹配a或b(re)匹配括号内的表达式,也表⽰⼀个组(?imx)正则表达式包含三种可选标志:i, m, 或 x 。
只影响括号中的区域。
(?-imx)正则表达式关闭 i, m, 或 x 可选标志。
只影响括号中的区域。
(?: re)类似 (...), 但是不表⽰⼀个组(?imx:re)在括号中使⽤i, m, 或 x 可选标志(?-imx:re)在括号中不使⽤i, m, 或 x 可选标志(?#...)注释.(?= re)前向肯定界定符。
如果所含正则表达式,以 ... 表⽰,在当前位置成功匹配时成功,否则失败。
Python如何利用正则表达式爬取网页信息及图片

Python如何利⽤正则表达式爬取⽹页信息及图⽚⼀、正则表达式是什么?概念:正则表达式是对字符串操作的⼀种逻辑公式,就是⽤事先定义好的⼀些特定字符、及这些特定字符的组合,组成⼀个“规则字符串”,这个“规则字符串”⽤来表达对字符串的⼀种过滤逻辑。
正则表达式是⼀个特殊的字符序列,它能帮助你⽅便的检查⼀个字符串是否与某种模式匹配。
个⼈理解:简单来说就是使⽤正则表达式来写⼀个过滤器来过滤了掉杂乱的⽆⽤的信息(eg:⽹页源代码…)从中来获取⾃⼰想要的内容⼆、实战项⽬1.爬取内容获取上海所有三甲医院的名称并保存到.txt⽂件中2.访问链接3.正则表达式书写的灵感进⼊⽹站查看本页⾯的源代码发现:医院的名称都是放在⼀个<div class="province-box"> ...... </div>盒⼦⾥我们只需要直接把这个盒⼦⾥⾯的数据过滤⼀下就⾏正则表达式:法⼀:1.⼀级过滤 :<div class="province-box">(.*)<div class="wrap-right">开头是:<div class="province-box"> (.*) 结尾是:<div class="wrap-right">2.⼆级过滤:title="(.*[院⼼部])*)" 获取title=" " ⾥⾯的信息法⼆:优化后⼀次性过滤:<li><a href="/[^/].*/" rel="external nofollow" rel="external nofollow" target="_blank" title="(.*)">贴图⽚开头是:结尾是:4.项⽬源代码import requestsimport reurl = "https:///sanjia/shanghai/"# 模拟浏览器的访问headers ={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) ''Gecko/20100101 Firefox/87.0'}res = requests.get(url,headers=headers)if res.status_code == 200:#1.获取⽹页源代码raw_text = res.text#2.正则表达式书写:#2.2注意:正则表达式默认匹配的是⼀⾏我们的源代码是多⾏匹配的要加另⼀个参数 re.DOTALL#2.3正则法⼀:#re.findall() 返回的是lsit集合⼀次过滤re_res = re.findall(r'<div class="province-box">(.*)<div class="wrap-right">', raw_text,re.DOTALL)#re_res[0] 获取下标是的数据⼆次过滤res=re.findall(r'title="(.*[院⼼部])*)"',re_res[0])#检查打印获取到的信息print(res)#2.4正则法⼆:#(优化)不⽤⼆次过滤⼀次过滤就解决了# re_list = re.findall(r'<li><a href="/[^/].*/" rel="external nofollow" rel="external nofollow" target="_blank" title="(.*)">', res.text)#print(re_list)# 写⼊⽂件中read = open("上海医院名单", "w", encoding='utf-8')for i in res:read.write(i)read.write("\n")read.close()else:print("error")项⽬⽬录:部分结果:python 正则表达式-提取图⽚地址import os,sys,time,json,timeimport socket,random,hashlibimport requests,configparserimport json,refrom datetime import datetimefrom multiprocessing.dummy import Pool as ThreadPooldef getpicurl(url):url = "/zipai/comment-page-352"html = requests.get(url).textpic_url = re.findall('img src="(.*?)"',html,re.S)for key in pic_url:print(key + "\r\n")#print(pic_url)getpicurl("/zipai/comment-pag.e-352")输出结果:总结到此这篇关于Python如何利⽤正则表达式爬取⽹页信息及图⽚的⽂章就介绍到这了,更多相关Python正则表达式爬取内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
python正则表达式与JSON-正则表达式匹配数字、非数字、字符、非字符、贪婪模式、非贪。。。

python正则表达式与JSON-正则表达式匹配数字、⾮数字、字符、⾮字符、贪婪模式、⾮贪。
1、正则表达式:⽬的是为了爬⾍,是爬⾍利器。
正则表达式是⽤来做字符串匹配的,⽐如检测是不是电话、是不是email、是不是ip地址之类的2、JSON:外部数据交流的主流格式。
3、正则表达式的使⽤re python 内置的模块,可以进⾏正则匹配re.findall(pattern,source)pattern:正则匹配规则-也叫郑泽表达式source:需要查找的⽬标源import rea = "C0C++7Java8C#Python6JavaScript"res = re.findall("Java",a)print res# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py"# ['Java', 'Java']4、正则表达式的应⽤查数字⽤概括字符集:\dimport rea = "C0C++7Java8C#Python6JavaScript"res = re.findall("\d",a)print res# Project/python_ToolCodes/test10.py"# ['0', '7', '8', '6']⽤另外⼀种匹配模式-字符集:[0-9]import rea = "C0C++7Java8C#Python6JavaScript"res = re.findall("[0-9]",a)print res# Project/python_ToolCodes/test10.py"# ['0', '7', '8', '6']其中"Java"叫普通字符,"/d" 源字符查⾮数字⽤概括字符集:\Dimport rea = "C0C++7Java8C#Python6JavaScript"res = re.findall("\D",a)print res# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py"# ['C', 'C', '+', '+', 'J', 'a', 'v', 'a', 'C', '#', 'P', 'y', 't', 'h', 'o', 'n', 'J', 'a', 'v', 'a', 'S', 'c', 'r', 'i', 'p', 't']⽤另外⼀种匹配模式-字符集:[^0-9]import rea = "C0C++7Java8C#Python6JavaScript"res = re.findall("[^0-9]",a)print res# Project/python_ToolCodes/test10.py"# ['C', 'C', '+', '+', 'J', 'a', 'v', 'a', 'C', '#', 'P', 'y', 't', 'h', 'o', 'n', 'J', 'a', 'v', 'a', 'S', 'c', 'r', 'i', 'p', 't']正则表达式的罗列:https:///item/正则表达式/1700215?fr=aladdin,挨个练习是没有必要的,⽤到去查即可4、匹配模式源字符+普通字符混合模式[]中的或操作#coding=utf-8import rea = "abc,acc,adc,aec,afc,ahc"#匹配acc和afcres = re.findall("a[cf]c",a)print res# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py"# ['acc', 'afc']取反操作:^#coding=utf-8import rea = "abc,acc,adc,aec,afc,ahc"#取出⾮(acc和afc)的字符res = re.findall("a[^cf]c",a)print res# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py"# ['abc', 'adc', 'aec', 'ahc']取范围操作:-#coding=utf-8import rea = "abc,acc,adc,aec,afc,ahc"#取出acc,adc,aec,afc(中间字符是c到f范围的)res = re.findall("a[c-f]c",a)print res#[Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py" #['acc', 'adc', 'aec', 'afc']匹配数字和字母:概括字符集匹配:\wimport rea = "abc&cba"res = re.findall("\w",a)print res# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py" # ['a', 'b', 'c', 'c', 'b', 'a']使⽤字符集匹配:[A-Za-Z0-9]import rea = "abc123&cba321"res = re.findall("[A-Za-z0-9]",a)print res# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py" # ['a', 'b', 'c', '1', '2', '3', 'c', 'b', 'a', '3', '2', '1']显然,是\w是不匹配⾮字母和数字的,⽐如“&”符号匹配⾮单词⾮数字字符概括字符集:\Wimport rea = "abc123&cba321"res = re.findall("\W",a)print res# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py" # ['&']使⽤字符集匹配:^A-Za-z0-9import rea = "abc123&cba321"res = re.findall("[^A-Za-z0-9]",a)print res# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py" # ['&']空格、制表符、换⾏符号之类的匹配:\simport rea = "python 111\tjava&67p\nh\rp"res = re.findall("\s",a)print res# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py" # [' ', '\t', '\n', '\r']匹配量词:匹配出python Java php必须三个⼀组:[a-z]{3}import rea = "python 1111java678php"res = re.findall("[a-z]{3}",a)print res[Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py" ['pyt', 'hon', 'jav', 'php']可以3-6个⼀组:因为最长python 为6 最短PHP为3:[a-z]{3,6}import rea = "python 1111java678php"res = re.findall("[a-z]{3,6}",a)print res# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py" # ['python', 'java', 'php']疑问:为什么3个能匹配匹配到pyt的时候为什么不终⽌?因为正则表达式的数量词分为贪婪和⾮贪婪模式,默认情况下,python 认为是贪婪模式的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
主讲老师:XXX
1
什么是正则表达式
2
原子
3
元字符
4
模式修正符
5
贪婪模式与懒惰模式
6
正则表达式函数
目录
正则表达式介绍
世界上信息非常多,而我们关注的信息有限。假如我们希望只提取出关注的数据,此时可以通过一些表达式 进行提取,正则表达式就是其中一种进行数据筛选的表达式。
正则表达式(Regular Expression),此处的“Regular”即是“规则”、“规律”的意思,Regular Exp ression即“描述某种规则的表达式”,因此它又可称为正规表示式、正规表示法、正规表达式、规则表达式、 常规表示法等,在代码中常常被简写为regex、regexp或RE。正则表达式使用某些单个字符串,来描述或匹配 某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索或替换那些符合某个模式的文本。
原子
\w 匹配字符、数字、下划线 \W 匹配除字母、数字、下划线以外的字符 \d 匹配十进制数字 \D 匹配除十进制数字以外的字符 \s 匹配空白字符 \S 匹配除空白字符以外的字符 import re s="Thisbookis1205yuan" pat=“\d\d” #通用字符作为原子 rst=re.search(pat,s) print(rst) 运行结果: <re.Match object; span=(10, 12), match='12'>
运行结果: <re.Match object; span=(10, 18), match='1205yuan'> 拓展: pat=“\d\d\d\d[^xyz]uan” #原子表 ,^表示非
元字符
元字符
所谓的元字符,就是正则表达式中具有一些特殊含义的字符,比如重复N次前面的字符等。常见的元字符包括: . 除换行符外任意一个字符串 ^ 不在原子表里,表示开始位置,在原子表里表示非 $ 结束位置 * 前面的字符出现0\1\多次 ? 前面的字符出现0\1次 + 前面的字符出现1\多次 {n} 前面的字符恰好出现n次 {n,} 前面的字符至少出现n次 {n,m} 前面的字符至少出现n次,至多m次 | 模式选择符 () 模式单元
3.使用正则表达式的re.search(正则,字符串)函数进行匹配,示例如下:
import re
s=“Ilovefootball”
pat=“love” #普通字符作为原子
rst=re.search(pat,s)
print(rst)
运行结果: <re.Match object; span=(1, 5), match='love'>
贪婪模式与懒惰模式
贪婪模式与懒惰模式
ቤተ መጻሕፍቲ ባይዱ
贪婪模式的核心点就是尽可能多的匹配,而懒惰模式的核心点就是尽可能少的匹配。
示范一: import re s="pythony" pat="p.*y" #默认为贪婪模式 rst=re.findall(pat,s) print(rst)
结果:['pythony']
示范二: import re s="pythony" pat=“p.*?y” #加上?懒惰模式 rst=re.findall(pat,s) print(rst)
原子
常见的非打印字符有: \n换行符 \t制表符 import re s="""I love football do you love football""" pat=“\n“ #非打印字符作为原子 rst=re.search(pat,s) print(rst)
非打印字符作为原子
输出结果: <re.Match object; span=(15, 16), match='\n'>
元字符
示范: import re s="Thisbookis1205yuanqian" pat="(\w*book)" rst=re.search(pat,s) print(rst)
元字符
运行结果: <re.Match object; span=(0, 8), match='Thisbook'>
模式修正符
结果:['py']
贪婪模式比较模糊,懒惰模式比较精准。
正则表达式函数
正则表达式函数
在Python中需要通过正则表达式对字符串进行匹配的时候,可以导入一 个库(模块),名字为re,它提供了
对正则表达式操作所需的方法。 方法
说明
re.match(pattern,string flags)
从字符串的开始匹配一个匹配对象, 例如匹配第一个 单词
模式修正符
所谓的模式修正符,即可以在不改变正则表达式的情况下,通过模式修正符改变正则表达式的含义,从而实 现一些匹配结果的调整等功能。
I 匹配时忽略大小写 M 多行匹配 L 本地化识别匹配 U 根据Unicode匹配 S 让.匹配包括换行符 import re s="""ILovefootball Doyou love football""" pat="love" rst=re.findall(pat,s,re.I) print(rst)
re.search(pattern,string flags)
在字符串中查找匹配的对象,找到第一个后就返回,如 果没有找到就返回None
re.sub(pattern,repl,string count) re.split(r',',text)
re.findall(pattern,string flags)
通用字符作为原子
原子
原子表
将几个原子组成一个表,通常用[]来表示,如:[xyz],表示从x,y,z三个字符中任意选择一个。 import re s="Thisbookis1205yuanqian" pat=“\d\d\d\d[xyz]uan” #原子表 rst=re.search(pat,s) print(rst)
原子
原子是正则表达式中最基本的组成单位,每个正则表达式中至少要包含一个原子。常见的原子类 型有。 普通字符作为原子 非打印字符作为原子 通用字符作为原子 原子表
1.有如下字符串:
原子
普通字符作为原子
s=“Ilovefootball”
2.要从中提取“love”子字符串,则可以定义一个正则表达式:pat=“love”