常用的正则符号(python)
常用的正则符号(python)
1. 原字符 指代直接存在于字符串内部的子串。
s1 = '通过几天Python的学习,感觉Python很简单,非常容易上手!'
re.findall('Python', s1)
#result ['Python', 'Python']
2.英文状态的句号. 指代任意字符(如数字、字母、标点符号、汉字等),但除了换行符\n。
# 提取出动力总成的值
s2 = '此次新朗逸主要搭载了1.5L和1.5T两种动力总成的发动机。别克英朗则搭载了1.0T和1.3T的动力总成。'
re.findall('1...',s2)
re.findall('1\...',s2)
#result ['1.5L', '1.5T', '1.0T', '1.3T']
3. 反斜杠 \
表示转义符,用于转换含义的符号。
\n:指代换行;
\t:指代Tab制表符;
\d:指代0~9中的任一数字;
\D:非数字;
\s:指代任意一种空白(如空格、Tab、换行等);
\s:非空白;
\w:指代字母、数字和下划线中的任意一种;
\W:指代特殊字符,即非字母,非数字,非汉字,非_
. :指代句号点本身;
# 剔除字符串中的所有空白
s3 = ' 距离2019北京马拉松开跑只有两周时间了,\n 今年的北京马拉松预报名人数超过16万人,\t 媒体公布的中签率只有16%左右,再创历年来的新低。\n'
re.sub('\s','',s3)
# 取出所有含O字母的单词
string2 = 'Together, we discovered that a free market only thrives when there are rules to ensure competition and fair play, Our celebration of initiative and enterprise'print(re.findall('\w*o\w*',string2, flags = re.I))
#result ['Together', 'discovered', 'only', 'to', 'competition', 'Our', 'celebration', 'of']
4.[] 指代字符集合,当需要特定字符匹配时,可以选择中括号
#exapmle 1
s4 = '用户联系方式:13612345566,用户编号为11011254321'
re.findall('1[356789]\d\d\d\d\d\d\d\d\d', s4)
# result['13612345566']#example2
s5 = '通过对比新朗逸1.5L和1.5T两种动力在1.5年行驶期后的数据。发现1.5T的口碑相对较好!'
re.findall('1.5[a-zA-Z]',s5)
re.findall('1.5[TL]',s5)
#resulut ['1.5L', '1.5T', '1.5T']
5.英文状态的圆括号 () 指代特定内容的截取
s6 = 'id:1, name:Tom, age:3, gender:1; id:2, name:Lily, age:5, gender:0'
re.findall('\d',s6)
#result ['1', '3', '1', '2', '5', '0']
re.findall('age:\d',s6)
#result ['age:3', 'age:5']
re.findall('age:(\d)',s6)
['3', '5']
6.英文状态的问号? 表示匹配前一个字符0次或1次
string1 = "{ymd:'2018-01-01',tianqi:'晴',aqiInfo:'轻度污染'},
{ymd:'2018-01-02',tianqi:'阴~小雨',aqiInfo:'优'},
{ymd:'2018-01-03',tianqi:'小雨~中雨',aqiInfo:'优'},
{ymd:'2018-01-04',tianqi:'中雨~小雨',aqiInfo:'优'}"
print(re.findall("tianqi:'(.*?)'", string1))
#result ['晴', '阴~小雨', '小雨~中雨', '中雨~小雨']
7. + 表示匹配前一个字符一次及以上
# 邮箱地址的匹配
email1 = 'Lsxxx2011@163.com'
email2 = '654088115@qq.com'
pattern = '[0-9a-zA-Z_\.\-]+@[a-zA-Z0-9_\-]+\.com'
8.* 表示匹配前一个字符0次及以上
# 提取出产品名称中含奶粉字样的产品
prod = ['婴儿袜','亨氏奶粉','奶粉勺','多功能奶瓶','幼儿奶粉量筒','磨牙棒']
res = []
for i in prod:res.extend(re.findall('.*奶粉.*',i))
print(res)
#result ['亨氏奶粉', '奶粉勺', '幼儿奶粉量筒']
9.{} 表示匹配前一个字符特定的次数或范围
{m}: 匹配前一个字符m次;
{m,}:匹配前一个字符至少m次;
{m,n}:匹配前一个字符m~n次;
{,n}:匹配前一个字符至多n次;
# 手机号码的匹配
pattern = '1[356789]\d{9}'
# 至少6个长度的密码
pattern = '\w{6,}'
# 区号信息
pattern = '0\d{2,3}'
10.元字符 ^ 表示以什么开头,如果写到[]里面就是取反
str="匹配规则这个字符串是否匹配"
print(re.findall("^匹配规则",str)) #字符串开始位置与匹配规则符合就匹配且打印匹配内容,否则不匹配,返回值是list#result['匹配规则']
str="匹配s规则这s个字符串是否s匹配f规则则re则则则"
print(re.findall("[^a-z]",str)) #反取,匹配出除字母外的字符,返回值是list#result ['匹', '配', '规', '则', '这', '个', '字', '符', '串', '是', '否', '匹', '配', '规', '则', '则', '则', '则', '则']
11. 元字符$ 表示以什么结尾
str="匹配s规则这s个字符串是否s匹配f规则则re则则则"
print(re.findall("则$",str)) #字符串结束位置与则符合就匹配,否则不匹配,返回值是list
#result ['则']str="匹配s规则这s个字符串是否s匹配f规则则re则则则1"
print(re.findall("则$",str)) #字符串结束位置与则符合就匹配,否则不匹配,返回值是list
#result []
12.元字符 r 将在python里有特殊意义的字符 比如转义字符\t \n,转换成原生字符(就是去除它在python的特殊意义),不然会给正则表达式造成冲突。
str1 = r'123\n456\t789'
str2 = '123\n456\t789'
print('str1:',str1)
print('str2:',str2)
#result str1: 123\n456\t789
#str2: 123
#456 789
13.正则匹配模式表
re.S(DOTALL) 使.匹配包含换行在内的所有字符
re.I(IGNORECASE) 使匹配对大小写不敏感
re.L(LOCAL) 做本地化识别匹配
re.M(MULTILINE) 多行匹配
re.X(VERBOSE) 该标志通过给予更灵活的格式以便将正则表达式写得更易于理解
re.U 根据Unicode字符集解析字符,这个标志影响\w,\W,\b,\B
常用模块函数
1. re.match(pattern, string, flags=0)
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
match 返回的是一个<_sre.SRE_Match object; span=(0, 5), match=‘jilao’>对象,有四种处理办法。
·group() 以str形式返回对象中match的元素
·start() 返回开始位置
·end() 返回结束位置
·span() 以tuple形式返回范围
print(re.match('www', 'www.runoob.com').group()) # 在起始位置匹配
print(re.match('www', 'www.runoob.com').start())
print(re.match('www', 'www.runoob.com').end())
print(re.match('www', 'www.runoob.com').span())
print(re.match('com', 'www.runoob.com'))www
0
3
(0, 3)
None
2.re.search(pattern, string, flags = 0)
re.search 扫描整个字符串并返回第一个成功的匹配。
匹配成功re.search方法返回一个匹配的对象,否则返回None。
我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
search返回的对象与match一样也要用那四种方法处理
print(re.search('www', 'www.runoob.com').span()) # 在起始位置匹配
print(re.search('com', 'www.runoob.com').span())(0, 3)
(11, 14)
line = "Cats are smarter than dogs";searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)if searchObj:print "searchObj.group() : ", searchObj.group()print "searchObj.group(1) : ", searchObj.group(1)print "searchObj.group(2) : ", searchObj.group(2)
else:print "Nothing found!!"searchObj.group() : Cats are smarter than dogs
searchObj.group(1) : Cats
searchObj.group(2) : smarter
re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符 串,直到找到一个匹配。
3. re.findall(string[,pos[,endpos]])
string:待匹配的字符串;
pos:可选参数,指定字符串的起始位置,默认为0;
endpos:可选参数,指定字符串的结束位置,默认为字符串的长度;
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
match 和 search 是匹配一次 findall 匹配所有。
pattern = re.compile(r'\d+') # 查找数字
result1 = pattern.findall('runoob 123 google 456')
result2 = pattern.findall('run88oob123google456', 0, 10)print(result1)
print(result2)['123', '456']
['88', '12']
4. re.finditer(pattern, string, flag=0)
和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
it = re.finditer(r"\d+","12a32bc43jf3")
for match in it: print (match.group() )12
32
43
3
5.re.split(pattern, string[,maxsplit=0, flags=0])
>>> re.split('\W+', 'runoob, runoob, runoob.')
['runoob', 'runoob', 'runoob', '']
>>> re.split('(\W+)', ' runoob, runoob, runoob.')
['', ' ', 'runoob', ', ', 'runoob', ', ', 'runoob', '.', '']
>>> re.split('\W+', ' runoob, runoob, runoob.', 1)
['', 'runoob, runoob, runoob.']>>> re.split('a*', 'hello world') # 对于一个找不到匹配的字符串而言,split 不会对其作出分割
['hello world']
6. re.sub(pattern, repl, string, count = 0, flag = 0)
pattern : 正则中的模式字符串。
repl: 替换的字符串,也可为一个函数。
string: 要被查找替换的原始字符串
count: 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
phone = "2004-959-559 # 这是一个国外电话号码"# 删除字符串中的 Python注释
num = re.sub(r'#.*$', "", phone)
print ("电话号码是: ", num)# 删除非数字(-)的字符串
num = re.sub(r'\D', "", phone)
print ("电话号码是 : ", num)电话号码是: 2004-959-559
电话号码是 : 2004959559
7. re.subn(pattern, repl, string, count=0, flags=0)
pattern:正则模型
repl:要替换的字符串
string: 要匹配的字符串
count:指定匹配的个数
flags:匹配模式
替换匹配成功的指定位置字符串,并且返回替换次数,可以用两个变量分别接受
origin = "hello alex bcd alex lge alex acd 19"
a,b = re.subn("a","替换",origin) #替换匹配成功的指定位置字符串,并且返回替换次数,可以用两个变量分别接受
print(a)
print(b)#输出
# hello 替换lex bcd 替换lex lge 替换lex 替换cd 19
# 4
常用的正则符号(python)相关推荐
- 第五章:正则表达式的使用-常用的正则符号(二)
直接学习:https://edu.csdn.net/course/play/6861/335840 常用的正则符号(二): #6.英文状态下的问号? 表匹配前一个字符0次或1次 #超链接的匹配 url ...
- 学习笔记(19):零基础搞定Python数据分析与挖掘-常用的正则符号(二)
立即学习:https://edu.csdn.net/course/play/6861/335840?utm_source=blogtoedu 英文状态中中括号[] 指代字符集合,当需要特定的字符串匹配 ...
- 第四周总结(文件属性正则符号三剑客 )
一. 文件属性分类 文件属性分类:索引信息属主信息属组信息软硬链接时间信息权限信息类型信息大小信息[root@shiyi ~ 15:24:28]# ll -i /bonian/ 51206131 d ...
- linux脚本除号,shell中常用的特殊符号整理
在shell中常用的特殊符号罗列如下: # ; ;; . , / \ 'string'| ! $ ${} $? $$ $* "string"* ** ? : ^ $# $@ `co ...
- 系统特殊符号、通配符号、正则符号、find、grep、sed、awk命令(总结)
目录 一.常见系统特殊符号 (一)基础符号系列 1)美元符号 $ 2)叹号符号 ! 3)竖线符号 | 4)井号符号 # (二)引号符号系列 (三)定向符号系列 (四)路径符号系列 (五)逻辑符 ...
- php 密码校验正则,PHP常用密码正则匹配验证
PHP常用密码正则匹配验证 第一种: //昵称2-10位字符,需由中文.数字.字母(区分大小写)和下划线组合 $a = '的方'; $b = preg_match( "/^[\x{4e00} ...
- python常用的集成开发环境和编辑器有哪些_常用的几款Python集成开发环境或者编辑器详解...
Python3开发常用工具一:为什么使用开发工具? 在Python3教程之<安装>中,我们已经安装了Python开发环境,但是在终端里执行相关命令始终是不能开发大型项目的,并且对写过的代码 ...
- php特殊函数,PHP常用特殊运算符号和函数的简单示例
这篇文章主要为大家详细介绍了PHP常用特殊运算符号和函数的简单示例,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小玲来看看吧! 注解符号: // 单行注解 多行注解 ...
- python自带的集成开发环境是什么-常用的几款Python集成开发环境或者编辑器详解...
Python3开发常用工具一:为什么使用开发工具? 在Python3教程之<安装>中,我们已经安装了Python开发环境,但是在终端里执行相关命令始终是不能开发大型项目的,并且对写过的代码 ...
最新文章
- 机器视觉图像采集卡的功能与应用
- ABAP术语-Object Name
- 矩阵乘法无需相乘,速度提升100倍,MIT开源最新近似算法 | ICML 2021
- STL erase() 迭代器失效
- python的socket编程执行顺序_Python篇-Socket网络编程
- 【未解决】Reporting Services报表在浏览器中的显示
- 量化指标公式源码_通达信指标公式源码线上阴线指标公式
- C++ 11右值引用
- (十三)nodejs循序渐进-高性能游戏服务器框架pomelo之扩展聊天服务器为机器人自动聊天
- Matplotlib - 折线图 plot() 所有用法详解
- 多选框实现全选_Angular1.x-checkbox-全选amp;单选amp;多选
- element 表格宽度自适应_Java 设置Word中的表格自适应的3种方式
- linux driver开发
- 动态绘制柱状图饼状图
- 蜘蛛搜索引擎_「SEO工具」如何利用爱站工具去分析各搜索引擎蜘蛛情况?
- python 技能清单_Python清单
- C语言中函数中传入一个数组,并且返回一个数组
- EMOS批量创建用户邮箱
- 超越自我 — 实现人生价值之路
- B-spline Surfaces