-
2017-05-30 20:36:31
1.match和search的区别
def re_method(): # search vs. Match s = 'abcd' print(re.search(r'c', s)) print(re.match(r'c', s)) if __name__ == '__main__': re_method()
返回值为
<_sre.SRE_Match object; span=(2, 3), match='c'>
None
match从字符串的第一个开始进行匹配,可以通过在前面加.*
的方式找到,其中.
表示匹配任意字符
如re.match(r'.*c', s)
search:搜索字符串任意位置的匹配,可以通过添加^
^表示某一字符串的开始位置
如re.search(r'^c', s)
2.split
分割字符,按照非字母字符
re.split(r'\W+','I love you')
[‘I’, ‘love’, ‘you’]
\W:表示非字母字符,\w:表示字母字符,如果按照\w分割,那么会是另一种结果
3.findall和finditer
findall根据正则表达式从左到右搜索匹配项,返回匹配的字符串列表(跟search是对应的关系,search是只要搜索到匹配的第一个,它就会停下来,findall是会继续往下查找)
re.findall(r'\w+','I love you')
输出['I', 'love', 'you']
re.findall(r'\d+\.?\d*', 'The beef is $5.6,I like to take 2 piece',)
输出[5.6 2]
finditer根据正则表达式从左到右搜索匹配项,返回一个迭代器迭代返回MatchObjec
def re_demo(): s = 'The first price is $9.90 and the second price is $100' i = re.finditer(r'\d+\.?\d*', s) for m in i: print(m.group()) re_demo()
4.sub和subn
字符串替换字符串替换
s = 'The first price is $9.90 and the second price is $100' print(re.sub(r"\$\d+\.?\d*",'<number>',s))
subn和sub一样:返回值多了替换的字符串个数
更多相关内容 -
python 正则表达
2020-12-23 01:23:40在线工具正则表达式正则,就是只和字符串相关。匹配‘1’就是去匹配‘1’,直接匹配就是了。字符组:[字符组]在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示。字符分为很多类,比如数字,...在线工具
正则表达式
正则,就是只和字符串相关。匹配‘1’就是去匹配‘1’,直接匹配就是了。
字符组:[字符组]
在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示。
字符分为很多类,比如数字,字母,标点符号等。
假如你现在要求一个位置“只能出现一个数字”,那么这个位置上的字符只能是0-9这10个数字。
字符组
正则
待
匹
配
字
符
匹配
结果
说明
[0123456789]
8
True
在一个字符组里枚举合法的所有字符,字符组里的任意一个字符和“待匹配字符”相同都视为可以匹配
[0123456789]
a
False
由于字符组里没有‘a’这个字符,所以不能匹配
[0-9]
7
True
也可以用-表示范围,[0-9]和[0123456789]是一个意思
[a-z]
s
True
同样如果要匹配 所有小写字母,直接用[a-z]就可以了
[A-Z]
B
True
[A-Z]表示所有的大写字母
[0-9a-fA-F
E
True
可以匹配数字,大小写形式的a~~f,用来验证16进制字符
字符:
元字符
匹配内容
.
匹配除换行符以外的任意字符
\w
匹配字母或数字或下划线
\s
匹配任意的空白符
\d
匹配数字
\n
匹配一个换行符
\t
匹配一个制表符
\b
匹配一个单词的结尾
^
匹配字符串的开始
$
匹配字符串的结尾
\W
匹配非字母或数字或下划线
\S
匹配非空白符
\D
匹配非数字
a|b
匹配字符a或字符b
()
匹配括号内的表达式,也表示一个组
[...]
匹配字符组里的字符
[^...]
匹配除了字符组里的所有字符
\w 就是word
\s 就是space
\d 就是digital
量词 :
量词
用法说明
*
重复0次或更多次
+
重复1次或更多次
?
重复0次或1次
{n}
重复n次
{n,}
重复n次或更多次
{n,m}
重复n次到m次
. ^ $
正则
待匹配字符
匹配结果
说明
海.
海燕海娇海东
海燕海娇海东
匹配所有“海.”的字符
^海.
海燕海娇海东
海燕
只从开头匹配“海.”
海.$
海燕海娇海东
海东
只匹配结尾的“海.”
* + ? { }
正则
待匹配字符
匹配结果
说明
李.?
李杰和李莲英和李二棍子
李杰
李莲
李二
?表示重复0次或1次,即只匹配“李”后的一个任意字符
李.*
李杰和李莲英和李二棍子
李杰和李莲英和李二棍子
*表示重复0次或更多次,即匹配”李“后面的0个或多个任意字符
李.+
李杰和李莲英和李二棍子
李杰和李莲英和李二棍子
+表示重复1次或更多次,即匹配”李“后面的1个或多个任意字符
李.{1,2}
李杰和李莲英和李二棍子
李杰和
李莲英
李二棍
{1,2}匹配1到2次任意字符
注间前面的*,+ ,?都是贪婪匹配,也就是尽可能的去匹配,后面加上?使其变成惰性匹配
正则
待匹配字符
匹配结果
说明
李.*?
李杰和李莲英和李二棍子
李
李
李
惰性匹配
字符集[] [^]
正则
待匹配字符
匹配结果
说明
李[杰莲英二棍子]*
李杰和李莲英和李二棍子
李杰
李莲英
李二棍子
表示匹配”李“后面[杰莲英二棍子]的任意次
李[^和]*
李杰和李莲英和李二棍子
李杰
李莲英
李二棍子
表示匹配一个不是”和“的字符的任意次
[\d]
456abcds3
4
5
6
3
表示匹配任意一个数字,匹配4个结果
[\d]+
456abccds3
456
3
表示匹配任意个数字,匹配两个结果
分组()与或 | [^]
身份证号码是一个长度为15或18个字符的字符串如果是15则全部是由数字组成,首位不能为0;如果是18位,则前17位
全部是数字,末位可能是数字或x,下面我们尝试用正则表示:
正则
待匹配字符
匹配结果
说明
^[1-9]\d{13,16}[0-9x]$
1101011980
01017032
1101011980
01017032
表示可以匹配一个正确的身份证号
^[1-9]\d{13,16}[0-9x]$
110101198
0010170
110101198
0010170
表示也可以匹配这串数字,但这并不是一个正确的身份证号,这是一个16们的数字
^[1-9]\d{14}(\d{2}[0-9x])?$
110101198
0010170
False
现在不会匹配错误的身份证号了
()表示分组,将\d{14}[0-9x]分成一组,就可以整体约束它们出现的次数0-1次
^([1-9]\d{16}[0-9x]|[1-9]\d{14})$
1101051998
12067023
1101051998
12067023
表示先匹配[1-9]\d{16}[0-9x]如果没有匹配上就匹配[1-9]\d{14}
转义符
在正则表达式中有很多特殊意义的元字符,比如\n和\s等,如果要在正则中匹配正常的”\n“而不是”换行符“,就需要对
”\“进行转义,变成”\\“.
在python中,无论是正则表达式,还是待匹配的内容,都是以字符串的形式出现的,在字符串中\也有特殊的含义,本身
还需要转义。所以如果匹配一次"\n",字符串中要写成'\\n',那么正则里就要写成"\\\\n",这样就太麻烦了。这个时候我们就用
到了r'\n'这个概念,此时的正则是r'\\n'就可以了。
正则
待匹配字符
匹配
结果
说明
\n
\n
False
因为正则表达式中\有特殊意义的字符,所以要匹配\n本身,用表达式\n无法匹配
\\n
\n
True
转义\之后变成\\,即可以匹配
”\\\n“
'\\n'
True
如果在Python中,字符串中的'\'也需要转义,所以每一个字符‘\’又需要转义一次
r'\\n'
r'\n'
True
在字符串之前加r,让整个字符串不转义
贪婪匹配
贪婪匹配:要满足匹配时,匹配尽可能长的字符串,默认情况下采用贪婪匹配。
正则
待匹配字符
匹配结果
说明
默认为贪婪匹配,会尽量长的去匹配字符
<.*?>
加上?为将贪婪匹配转换为非贪婪匹配,匹配
尽量短的字符串
几个常用的非贪婪匹配:
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
.*?的用法
. 是任意字符
* 是取 0 至 无限长度
? 是非贪婪模式。
何在一起就是 取尽量少的任意字符,一般不会这么单独写,他大多用在:
.*?x
就是取前面任意长度的字符,直到一个x出现
-
Python正则表达式指南.pdf
2017-11-10 16:29:55python正则表达式的的介绍,包括正则格式、使用等相关的。 -
Python正则表达式匹配ip地址实例
2020-12-23 14:20:12本文实例讲述了正则表达式匹配ip地址实例。代码结构非常简单易懂。分享给大家供大家参考。 主要实现代码如下: import re reip = re.compile(r'(?<![\.\d])(?:\d{1,3}\.){3}\d{1,3}(?![\.\d])') for ip in reip... -
Python 正则表达的几种方法
2020-11-12 15:39:13本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 ...Python 使用re 模块提供了正则表达式处理的能力 re.M 多行模式 re.MULTILNE re.S本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理
以下文章来源于腾讯云,作者:数据医生
( 想要学习Python?Python学习交流群:1039649593,满足你的需求,资料都已经上传群文件流,可以自行下载!还有海量最新2020python学习资料。 )
Python 使用re 模块提供了正则表达式处理的能力
re.M 多行模式 re.MULTILNE re.S 单行模式 re.DOTALL re.I 忽略大小写 re.IGNORECASE re.X 忽略表示式中的空白字符 re.VERBOSE 使用 | 位 或 / 运算开启多种选项
方法
编译
re.compile(patten,flags=0)
设定flags, 编译模式,返回正则表达式对象regex。
pattern 就是正则表达式字符串,flags是选项。正则表达需要被编译,为了提高提高效率,这些编译后的结果被保存,下次使用同样的pattern 的时候,就不需要再次编译。
re的其他方法为了提高效率都调用了编译方法,就是为了提速。
单次匹配
re.march(pattern,string,flags=0) regex.match(string[,pos[,endpos]]) match匹配从字符串开头匹配,regex对象match 方法可以重设定开始位置和结束位置。返回match对象
re.search(pattern,string,flags=0) regex.search(string[,pos[,endpod]]) 从头搜索直到第一个匹配,regex对象search方法可以重设定开始位置和结束位置,返回match对象
re.fullmatch(pattern,string,flags=0) regex.fullmatch(string[,pos[,endpos]]) 整个字符串和正则表达式匹配
全文搜索
re.findall(pattern,string,flags=0) regex.findall(string[,pos[,endpos]]) 对整个字符串,从左到右匹配,返回所有匹配的列表
re.finditer(pattern,string,flags=0) redex.finditer(string[,pos[,endpos]]) 对整个字符串,从左到右匹配,返回所有匹配项,返回迭代器。注意每次迭代返回的是match对象
匹配替换
re.sub(pattern,replacement,string,count=0,flags=0) regex.sub(reglacement,string,count=0) 使用pattern对字符串string 进行匹配,对匹配项使用repl替换。 replacement可以是string, bytes, function.
re.subn(pattern,replacement,string,count=0,flags=0) regex.subn(replacement,string,count=0) 同sub返回一个元组(new_string,number_of_subs_made)
字符串分割
字符串的分割函数,太难用,不能指定多个字符进行分割。 re.split(pattern,string,maxsplit=0,flags=0) re.split分隔字符串
分组
使用小括号的pattern 捕获的数据被放到了组group 中。 match ,search 函数可以返回match 对象;findall 返回字符串列表;finditer 返回一个个match 对象 如果pattern 中使用哦分组,如果有匹配的结果,会在match 对象中 1、使用group(N)方式返回对应分组,1-N 是对应的分组,0返回整个匹配的字符串 2、如果使用了命名分组,可以使用group('name') 的方式取分组 3、也可以使用groups()返回多有分组 4、使用groupdict()返回所有命名的分组
-
python中使用正则表达式将所有符合条件的字段全部提取出来
2021-01-19 01:46:18问题如标题,使用正则表达式匹配字段目前无非就三种,分别是: re.match() re.search() re.findall() 简单介绍一下,re.match()与re.search()非常类似,主要区别就是前者是从目标字符串的开头匹配,而后者则要没有... -
python 正则表达式 详解(英文)
2013-07-25 17:24:51目前找到的关于python 正则表达式介绍最好最详细的文档,梳理得也很有条理! -
Python正则表达式
2021-08-29 18:54:58Python正则表达式 菜鸟教程地址 Python 正则表达式 | 菜鸟教程 (runoob.com) 正则在线测试地址 在线正则表达式测试 (oschina.net) 常用操作符 操作符 . 表示任何单个字符 [] 字符集,对单个字符给出取值范围 [abc]...Python正则表达式
菜鸟教程地址
Python 正则表达式 | 菜鸟教程 (runoob.com)
正则在线测试地址
常用操作符
操作符 . 表示任何单个字符 [] 字符集,对单个字符给出取值范围 [abc]表示a、b、c,[a-z]表示a-z单个字符 [^] 非字符集。对单个字符给出排除范围 [^abc]表示非a或b或c的单个字符 * 前一个字符的0次或者无限次的扩展 abc*表示ab、abc、abcc、abcccc等等 + 前一个字符的1次或者无限次的扩展 abc+表示 abc、abccc、abcc、abccccc等 ? 前一个字符的0次或者1次扩展 abc?表示 ab、abc | 左右表达式中的任意一个 abc|def表示abc、def {m} 扩展前一个字符m次 ab{2}c表示abbc {m,n} 扩展前一个字符m至n次(含n) ab{1,2}c表示abc、abbc ^ 匹配字符串开头 ^abc表示abc在一个字符串的开头 $ 匹配字符串结尾 abc$表示abc在一个字符串的结尾 () 分组标记内部只能使用|操作符 (abc)表示abc ,(abc|def)表示abc、def \d 数字,等价于[0-9] \w 单词字符,等价于[A-Za-z0-9_] 表示字符小写大写的a-z 和数字0-9以及下划线_ \b 匹配一个单词边界,也就是指单词和空格间的位置。 例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
正则实战练习
以0开头,然后是两个数字,然后是一个连字号"-",最后是8个数字
查找内容: 010-11111111 正则表达式: 0\d{2}-\d{8} 结果: 共找到 1 处匹配: 010-11111111 查找内容: 1111010-11111111321 正则表达式: 0\d{2}-\d{8} 结果: 共找到 1 处匹配: 010-11111111 查找内容: 010-11111 正则表达式: 0\d{2}-\d{8} 结果: (没有匹配)
匹配以字母a开头的单词(注意是找单词,而不是在一个字符串中匹配字符)
查找内容: hello,world,apple,banana,AirPods,await 正则表达式: \ba\w*\b 结果: 共找到 2 处匹配: apple await
匹配刚好6个字符的单词
查找内容: hello,world,apple,banana,AirPods,await 正则表达式: \b\w{6}\b 结果: 共找到 1 处匹配: banana
匹配1个或更多连续的数字
查找内容: this is a number11121aaa 正则表达式: \d+ 或者\d{1,} 结果: 共找到 1 处匹配: 11121
5位到12位QQ号
查找内容: 123456789125 正则表达式: ^[1-9]\d{4,11}$ 结果: 共找到 1 处匹配: 123456789125
Python正则常用函数
re.match
从字符第一个开始匹配,匹配到返回对象,匹配不到返回None
testUrl = "http://www.baidu.com" pattern = re.compile(r'b.*u') print(re.match(pattern, testUrl)) print(re.match(r'http', testUrl)) 输出>> None <re.Match object; span=(0, 4), match='http'>
re.search
在字符串中搜索,返回匹配到的第一个对象,匹配不到返回None
testUrl = "http://www.baidu.com" pattern = re.compile(r'b.*u') print(re.search(pattern, testUrl)) 输出>> <re.Match object; span=(11, 16), match='baidu'>
re.sub
替换字符串中的匹配的字符,返回替换后的字符串
testUrl = "http://www.baidu.com" print(re.sub(r'\W+', "", testUrl)) 输出>> httpwwwbaiducom
re.findall
返回所有匹配的结果列表
testUrl = "http://www.baidu.com" print(re.findall(r'\w{4}', testUrl)) 输出>> ['http', 'baid']
实战
获取百度首页,匹配title标签中的内容
import requests testUrl = "http://www.baidu.com" req = requests.get(testUrl) pattern = r'<title>(.*?)</title>' print(re.findall(pattern, req.content.decode('utf-8'))) 输出>> ['百度一下,你就知道']
-
Python正则表达式大全
2022-03-18 15:54:08正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则... -
python正则表达查找问题
2018-09-15 07:55:52贪心和非贪心查找 import re numreg1 = re.compile(r'(ha){2,4}ll') numreg2 = re.compile(r'(ha){2,4}?ll') #***为何非贪心查找不生效?*** numreg22 = re.compile(r'ttt(ha){2,4}?') numreg3 = re.compile(r'(ha){... -
python正则表达
2020-02-21 18:36:43先从正则表达开始吧。 正则表达模块里面的函数 findall(): 这个函数的用法就是字面意思:找到所有匹配的对象。其返回值是一个列表,如果寻找的目标不存在,则返回一个空列表。输出返回值的方法是直接放在print里,... -
python正则表达以及爬虫(一)
2020-11-06 11:45:35python中的爬虫(一) 1、主要用途:主要用于爬取网页中的数据 2、当前网络传输协议 (1)、http协议:超文本传输协议,传输的数据格式为html(超文本标记语言) (2)、Https协议:具有安全的验证的超文本传输协议,... -
Python正则表达式讲解
2022-02-23 15:31:24一、正则表达式语法 (一) 字符与字符类 特殊字符:\.^$?+*{}[]()| 以上特殊字符要想使用字面值,必须使用\进行转义 字符类 包含在[]中的一个或者多个字符被称为字符类,字符类在匹配时如果没有指定... -
Python正则表达式去除符号
2021-12-31 16:32:53def filter_special_words(text): return re.sub(r"[.!?:;()()'〓 ]", "", text) data['经营范围_cn'] = data['经营范围'].apply(lambda x: filter_special_words(str(x))) -
python正则表达式查找和替换内容
2021-12-20 18:02:451、编写Python正则表达式字符串s。 2、使用re.compile将正则表达式编译成正则对象Patternp。 3、正则对象p调用p.search或p.findall或p.finditer查找内容。 4、正则对象p调用p.sub或p.subn替换内容。 实例 import&... -
python正则表达式
2020-12-05 14:20:18正则表达式正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。作用1.检测某个... -
Python正则表达
2018-09-28 08:57:17正则表达式 import re 正则表达式里 . 表示任何字符 re.search(r’[aeiou]’,‘I love You’) ## 区分大小写 re.search(r’[0-4]’,‘I love You’) ## 可以用 - 表示范围 re.search(r’ab{3}’,‘abbbc’) ## ... -
python正则表达式简单例子
2021-05-25 13:39:02python正则表达式简单例子 写这篇文章的原因是希望给和我一样在学正则表达式的同学一个正则表达式模式的同学一个简单例子,以及方便我日后回顾复习。因此我并不打算介绍正则表达式的任何模式,只是给出所以模式的一... -
Python 正则表达式:compile
2021-03-17 01:09:43本文以匹配×××ID为例,介绍re模块的compile与match的用法复杂匹配 = re.compile(正则表达式): 将正则表达式实例化+re.match(要匹配的字符串): 从字符串开 头/尾 开始匹配简单匹配 = re.match(正则表达式,要匹配的... -
python正则表达式匹配并替换为指定字符
2022-01-31 11:51:25pattern 正则表达式 repl 替换的字符串,也可为一个函数 string 要被查找替换的原始字符串 count 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配 flag 编译时用的匹配模式,数字形式 二、示例 -1.脱敏日志... -
Python正则表达式用法详解
2020-12-19 11:46:31搞懂Python 正则表达式用法Python 正则表达式正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。re 模块使... -
python 正则 域名
2020-12-24 12:15:42关于python 正则 域名的搜索结果回答详细解答可以参考官方帮助文档适用场景表单上传是指使用OSS API中的PostObject请求来完成Object的上传,上传的Object不能超过5GB。表单上传非常适合嵌入在HTML网页中来上传Object... -
Python正则表达式的用法
2020-12-29 10:22:07替换所有匹配的子串用newstring替换subject中所有与正则表达式regex匹配的子串result, number = re.subn(regex, newstring, subject)2.替换所有匹配的子串(使用正则表达式对象)reobj = re.compile(regex)result, ... -
Python正则表达式总结
2020-12-17 11:00:00编译 当我们在Python中使用正则表达式时,re模块内部会干两件事情: 1.编译正则表达式,如果正则表达式的字符串本身不合法,会报错; 2.用编译后的正则表达式去匹配字符串。 如果一个正则表达式要重复使用几千次,... -
Python 正则表达 有没有一定的必要去记呀?
2020-12-14 14:51:41至于Python正则表达式,只要懂基本的compile,search,match, findall,剩下的要用再查[文档](https://docs.python.org/3.6/library/re.html)。当然,练得纯熟也好。你一定要会正则表达式,因为它... -
python 正则表达式详解
2021-01-29 05:49:21正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式...首先,python中的正则表达... -
python 正则查找文件名
2021-07-04 11:17:00def findAllSmallJson(json_file, save_small_root): big_dir, big_name = os.path.split(json_file) big_not_suffix, big_suffix = os.path.splitext(big_name) find_file_list = [] # 6319938267001088._1_... -
Python 正则表达式验证浮点数
2021-01-29 18:51:201. Mandatory sign, integer, fraction, and exponent^[-+][0-9]+\.[0-9]+[eE][-+]?[0-9]+$2. Mandatory sing, integer, and fraction, but no exponent^[-+][0-9]+\.[0-9]+$3. Optional sign, mandatory integer an... -
PYTHON 正则表达式(匹配开头结尾)
2022-04-25 15:10:25>>> filename = "spam.txt" >>> filename[-4:] == ".txt" True >>> url = "http://www.python.org" >>> url[:5] == "http:" or url[:6] == "https:" or url[:4] == "ftp:" True >>> 4、你可以能还想使用正则表达式...