正则表达式是我认为比较难的一个东西,今天忽然又学到了这个,想到写下来,以后作为参考手册使用。

python如果想使用python需要引用re方法,在文件开始进行引用。

import re

接下来说一下re包含的函数的用法。

re.__all__

返回一个包含re函数名的列表

print(re.__all__)

结果如下:

['match', 'fullmatch', 'search', 'sub', 'subn', 'split', 'findall', 'finditer', 'compile', 'purge', 'template', 'escape', 'error', 'A', 'I', 'L', 'M', 'S', 'X', 'U', 'ASCII', 'IGNORECASE', 'LOCALE', 'MULTILINE', 'DOTALL', 'VERBOSE', 'UNICODE']

re.__version__

返回re的版本

print(re.__version__)

结果如下:

2.2.1

match(pattern, string, flags=0)

判断pattern是否在string开始位置,如果有,返回匹配的对象,否则返回None

(为了演示方便以及照顾不是特别了解正则表达式的童鞋,这里使用简单的字符串匹配来观察效果,具体的正则表达式写法下章会说明。flags是一个标志变量,文章最后会进行说明,默认为0,没有效果,其他的方法相同。)

能匹配上时:

source='qq14717287xx@qq.com'item='qq1'res=re.match(item,source)ifres:print(res)print(res.group())else:print(res)print('No match!')

结果如下:

<_sre.sre_match object span="(0," match="qq1">qq1

可以看到,如果只是打印es会输出匹配项,匹配多长字符,匹配的字符。

匹配之后res有group方法,能够输出匹配了哪些字符。

不能匹配上时:

source='qq14717287xx@qq.com'item='qq2'res=re.match(item,source)ifres:print(res)print(res.group())else:print(res)print('No match!')

结果如下:

None

No match!

没有匹配上的时候res没有group方法,如果使用的话会报错。

fullmatch(pattern, string, flags=0)

判断pattern是否是string的全部,如果是,返回匹配的对象,否则返回None

能匹配上时:

source='qq14717287xx@qq.com'item='qq14717287xx@qq.com'res=re.fullmatch(item,source)ifres:print(res)print(res.group())else:print(res)print('No match!')

结果如下:

<_sre.sre_match object span="(0," match="qq14717287xx@qq.com">qq14717287xx@qq.com

不能匹配上时:

source='qq14717287xx@qq.com'item='qq14717287'res=re.fullmatch(item,source)ifres:print(res)print(res.group())else:print(res)print('No match!')

结果如下:

None

No match!

不是全部的字符串就不能匹配上,同样的,没有匹配上就没有group方法。

search(pattern, string, flags=0)

判断string里面是否包含pattern,如果有,返回匹配的对象,否则返回None

能匹配上时:

source='qq14717287xx@qq.com'item='xx'res=re.search(item,source)ifres:print(res)print(res.group())else:print(res)print('No match!')

结果如下:

<_sre.sre_match object span="(10," match="xx">xx

不能匹配上时:

source='qq14717287xx@qq.com'item='xz'res=re.search(item,source)ifres:print(res)print(res.group())else:print(res)print('No match!')

结果如下:

None

No match!

与match函数相同,如果不能匹配上时就没有group方法,否则会报错。

sub(pattern, repl, string, count=0, flags=0)

判断string里面是否含有pattern,如果含有则使用repl替换,返回新字符串。不改变原有字符串。count定义替换的次数,如果不填写默认替换字符串中全部匹配的项。

能匹配上时:

source='qq14717287xx@qq.com&10010/10086'item='1'res=re.sub(item,'n',source,4)print(res)print(source)

结果如下:

qqn47n7287xx@qq.com&n00n0/10086qq14717287xx@qq.com&10010/10086

可以看出,原字符串中的‘1’被替换成了‘n’四次,同时没有改变源字符串。

不能匹配上时:

source='qq14717287xx@qq.com&10010/10086'item='12'res=re.sub(item,'n',source,4)print(res)print(source)

结果如下:

qq14717287xx@qq.com&10010/10086qq14717287xx@qq.com&10010/10086

由结果可以看出,此函数如果没有匹配上也不会报错。

subn(pattern, repl, string, count=0, flags=0)

同sub函数,但是返回一个元组,包含修改后的字符串以及修改的次数。

能匹配上时:

source='qq14717287xx@qq.com&10010/10086'item='1'res=re.subn(item,'n',source,4)print(res)print(source)

结果如下:

('qqn47n7287xx@qq.com&n00n0/10086', 4)

qq14717287xx@qq.com&10010/10086

可以看到,函数返回了一个数组,包括新字符串以及修改的次数。函数并没有修改原字符串。

不能匹配上时:

source='qq14717287xx@qq.com&10010/10086'item='12'res=re.subn(item,'n',source,4)print(res)print(source)

结果如下:

('qq14717287xx@qq.com&10010/10086', 0)

qq14717287xx@qq.com&10010/10086

可以看到,函数返回的修改次数为0

split(pattern, string, maxsplit=0, flags=0)

以pattern作为分隔符给string进行分隔,返回一个列表。maxsplit定义最多分几次,不写默认全部进行分隔。

能够匹配上时:

source='qq14717287xx@qq.com&10010/10086'item='1'res=re.split(item,source,4)print(res)print(source)

结果如下:

['qq', '47', '7287xx@qq.com&', '00', '0/10086']

qq14717287xx@qq.com&10010/10086

以‘1’作为分隔符分了四次,可以看到,并没有改变原字符串。

不能匹配时:

source='qq14717287xx@qq.com&10010/10086'item='12'res=re.split(item,source,4)print(res)print(source)

结果如下:

['qq14717287xx@qq.com&10010/10086']

qq14717287xx@qq.com&10010/10086

可以看到,此函数没有匹配上也不会报错。

findall(pattern, string, flags=0)

查找string中全部匹配pattern的项,返回一个列表

能够匹配时:

source='qq14717287xx@qq.com&10010/10086'item='100'res=re.findall(item,source)print(res)print(source)

结果如下:

['100', '100']

qq14717287xx@qq.com&10010/10086

不能匹配时:

source='qq14717287xx@qq.com&10010/10086'item='12'res=re.findall(item,source)print(res)print(source)

结果如下:

[]

qq14717287xx@qq.com&10010/10086

finditer(pattern, string, flags=0)

效果与findall相似,只不过finditer返回一个迭代器,拥有group方法(匹配的字符串)和span方法(匹配字符串的位置)

能够匹配时:

source='qq14717287xx@qq.com&10010/10086'item='100'res=re.finditer(item,source)for i inres:print(i.group(),i.span())print(res)print(source)

结果如下:

100 (20, 23)100 (26, 29)qq14717287xx@qq.com&10010/10086

遍历迭代器使用group方法和span方法可以得到匹配的字符和字符匹配的位置。

不能匹配时:

source='qq14717287xx@qq.com&10010/10086'item='12'res=re.finditer(item,source)for i inres:print(i.group(),i.span())print(res)print(source)

结果如下:

qq14717287xx@qq.com&10010/10086

可以看到,如果不匹配的话,迭代器就没有输出

compile(pattern, flags=0)

预编译正则表达式。以上的方法都是在进行调用的时候开始编译正则表达式,如果查找条目较多,比如说5亿个数据,每次都编译的话,效率必然会受到影响。而使用compile函数则可以预编译正则表达式,这样就不必每次都编译正则表达式,提高效率。

用法:

source='qq14717287xx@qq.com&10010/10086'res=re.compile('100')print(res.findall(source))print(source)

结果如下:

['100', '100']

qq14717287xx@qq.com&10010/10086

purge()

清除缓存中的正则表达式。这个,没有明白具体用法。

template(pattern, flags=0)

编译一个模版表达式,返回一个表达式对象。没有明白用法。

escape(pattern)

对字符串中的非字母数字进行转义,将字符串转义为python能够识别的正则表达式。

用法:

source='qq14717287xx@qq.com&10010/10086'

print(re.escape(source))

结果如下:

qq14717287xx\@qq\.com\&10010\/10086

编译标志位解释:

编译标志位就是函数后面的flags参数,通过设置能够改变正则表达式匹配规则,具有更大的灵活性。多个标志位可以通过按位OR进行设定,如I|M被设置为I标志和M标志。

A  ASCII字符串模式中匹配ASCII字符类,而且是默认模式。字节模式中则是唯一可以使用的模式,不需要进行指定。

I  IGNORECASE匹配时忽略大小写的变化。

L  LOCALE影响 \w, \W, \b和\B,取决于当前的本地化设置。

locales 是 C 语言库中的一项功能,是用来为需要考虑不同语言的编程提供帮助的。举个例子,如果你正在处理法文文本,你想用 "w+ 来匹配文字,但 "w 只匹配字符类 [A-Za-z];它并不能匹配 "é" 或 "?"。如果你的系统配置适当且本地化设置为法语,那么内部的 C 函数将告诉程序 "é" 也应该被认为是一个字母。当在编译正则表达式时使用 LOCALE 标志会得到用这些 C 函数来处理 "w 後的编译对象;这会更慢,但也会象你希望的那样可以用 "w+ 来匹配法文文本。

M  MULTILINE“^”只匹配每一行的开头,如果之前有换行符,则不考虑换行符之前的内容,“$”只匹配每一行的结尾,如果之后有换行符,不考虑换行符之后的内容。

S  DOTALL使 "." 完全匹配任何字符,包括换行;如果没有这个标志, "."只会匹配除了换行外的任何字符。

X  VERBOSE允许将正则表达式写为多行,忽略空白字符(字符类或者反斜杠之后的不忽略)。可以添加注释,注释使用“#”号标识(不能在字符串或者反斜杠之后)。

U  UNICODE仅用于兼容性。忽略字符串模式(默认),并禁止字节模式。

用法如下(以I为例,其它标志位用法相同):

source='QQ14717287xx@qq.com&10010/10086'item='qq14717287xx@QQ'res=re.findall(item,source,re.I)print(res)print(source)

运行结果是:

['QQ14717287xx@qq']

QQ14717287xx@qq.com&10010/10086

3 x 10的python表达式_python3.x 正则表达式的应用相关推荐

  1. 3 x 10的python表达式_已知 x = [3, 5, 7],那么表达式 x[10:]的值为_学小易找答案

    [判断题]Python 3.x完全兼容Python 2.x. [填空题]已知 x = 3,那么执行语句 x += 6 之后,x的值为 [判断题]在Python 3.x中可以使用中文作为变量名. [判断 ...

  2. 数学关系式2x=10的python表达式为_24

    [简答题](6.4)请说明casode放大器.CD-CS(CC-CE).CD-CE放大器及达林顿电路的特征? [单选题]切除肾上腺引起动物死亡的原因,主要是由于缺乏 [单选题]为了给整形变量x.y.z ...

  3. 3 x 10的python表达式_这道数学题用PYTHON编程语言怎么写? 编程语言python是用

    我觉着,这个应该这样解决比较符合计算机解题思路. 下面的回答的,思考的东西太多. # -*- coding: utf-8 -*- __author__ = 'lpe234' __date__ = '2 ...

  4. python表达式计算器_Python正则表达式实现简易计算器功能示例

    本文实例讲述了Python正则表达式实现简易计算器功能.分享给大家供大家参考,具体如下: 需求:使用正则表达式完成一个简易计算器. 功能:能够计算简单的表达式. 如:1*2*((1+2)/(2+3)+ ...

  5. 2的10次方-1的python表达式_第1章 语言处理与Python

    1.尝试使用Python解释器作为一个计算器,输入表达式,如12/(4+1). >>>12/(4+1) 2 2.26个字母可以组成26的10次方或者26**10个10字母长的字符串. ...

  6. python表达式3or5的值为_Python表达式10+5%3-True+False的值为____。

    [单选题]现代信息技术的组成有通信技术.计算机技术.传感技术和( ) [简答题]Please read the article of China Daily and answer the questi ...

  7. 写出下列数学式对应的python表达式_Python程序设计课后习题答案-第一单元

    D. 10.字符串s='a\\nb\\tc',则len(s)的值是( ).C A.7 B.6 C.5 D.4 11.Python语句print(0xA+0xB)的输出结果是( ).D A.0xA+0x ...

  8. python表达式3and not5的值_太原理工大学python考试题总结

    已知x = [1, 2, 3],那么x*3的值为 [1, 2, 3, 1, 2, 3, 1, 2, 3] 已知x = [1, 2]和y = [3, 4],那么x+y的结果是 [1, 2, 3, 4] ...

  9. python表达式_python表达式是什么

    python表达式是值,变量和操作符(或叫运算符)的组合.单独的一个值是一个表达式,单独的变量也是一个表达式. 运算符和操作数一起构成表达式,操作数可以使用标识符表示,如a=3;b=2;c=a*b,表 ...

最新文章

  1. pytorch神经网络插件或可以提高所有网络的准确率(提高权重的利用率)
  2. VS-OpenCV三种加载图片的方式
  3. C++井字棋游戏,DOS界面版
  4. linux安装jdk8_Skywalking系列博客1-安装单机版 Skywalking
  5. UBUNTU804VirtualBox出现常见问题解决(转高手的)我转的CU的
  6. IOS开发基础之使用XCode12快速生成代码段
  7. Response.Write具体介绍
  8. std::map的insert和下标[]访问
  9. .NET平台下开源框架
  10. 浪漫情人节|C语言画心型
  11. Windows下如何使用CMD命令进入MySQL数据库
  12. matlab单机无限大系统_MATLAB运用simulink建立简单的单机-无穷大系统仿真
  13. 软通动力:致力智慧城市与大数据协同发展
  14. 简单实现RPC/RMI框架
  15. python程序输出田字格_Python程序练习题5.1-输出更大的田字格。
  16. ensp 移动主机搜索不到AP信道_H3C路由器GR2200 支持LAN/WAN切换,负载均衡 支持快速扩展无线AP 高性能企业级路由器_GR2200_支持LAN/WAN切换,负载均衡...
  17. 鼠标键盘与计算机无法连接,蓝牙鼠标/键盘同时提示已配对 但是永远无法连接上...
  18. HttpClient 实现 socks 代理
  19. AtCoder 001 A BBQ Easy
  20. php tp5上传图片到阿里云OSS

热门文章

  1. 开发STC89C51系列单片机需要用到的C语言技术
  2. 数据挖掘算法案例python_《常用数据挖掘算法总结及Python实现》[5.1MB]PDF影印版下载-码农之家...
  3. 绍一下Spring Cloud微服务架构
  4. html输入页美化模板,html页面输入框input的美化
  5. 12米不锈钢旗杆尺寸
  6. Unity-ShaderGraph 边缘发光与卡通火焰
  7. ROS系列——Ubuntu18.04下ros Melodic安装mavros过程中遇到问题及解决-定期更新版
  8. matlab 显示定点数的范围,定点数 - MATLAB Simulink - MathWorks 中国
  9. eclipse安装TestNG后无法使用TestNG的解决方法
  10. 直播软件开发场景中的用户推广方式——三级分销如何实现