python正则

python语言之正则

喜夏-厌秋 提交于 2020-01-08 23:59:45
目录 (一)正则表达式的构成 (三)Python正则模块之MatchObject (一)正则表达式的构成 正则表达式由两种元素组成: 字面值 普通字符和 需要转义的字符(,^,$,.,|,?,*,+,(),[],{}) 元字符(特殊意思) .:除\n外的所有字符 \d:数字,等同于[0-9] \D:匹配所有非数字 [ ^ 0-9] \s:空白字符,\t\r\n\f\v \S:非空白字符[ ^\t\r\n\f\v] \w:字母数字字符[A-Za-z0-9_] \W:字母数字字符[ ^A-Za-z0-9_] |:yes|no +:一次或者多次 ?:一次或者0次 *:0次或者多次 {3,5}:3次到5次 {m}:m次 {m,}:最少m次 {,n}:最多n次 贪婪与非贪婪 非贪婪(两次后加?) .*? 贪婪(默认) 边界匹配 ^:行首 $:行尾 \b:单词边界 \B:非单词边界 \A:输入开头 \Z:输入结尾 ​ ​ (二)Python正则模块之RegexObject 模块:import re RegexObject:编译后的正则表达式对象(编译为字节码并缓存re.compile),有利于重用 findAll方法 import re text = "Tom is 8 years old. Mike is 23 years old" pattern = re.compile('\d+')

【转】python中文decode和encode转码

旧街凉风 提交于 2019-12-30 21:27:42
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。 decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。 encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。 因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码 (与代码本身的编码是一致的!) 测试: 我的eclipse里面代码为utf-8编码的。然后我这样写代码 s="你好" s=s.decode('gb2312').encode('utf-8') print s 报错: UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 2-3: illegal multibyte sequence 原因

python 正则

拥有回忆 提交于 2019-12-29 21:33:02
1、正则表达式是什么 对字符串进行匹配,过滤、搜索、查找的一种方法 python正则对象----字符串 2、应用场景 3、常用匹配规则 实例 # coding:utf8 import re line = "Bananas are more yellow than apples" match_obj = re.match( r'(.*) are (.*?) .*', line) if match_obj: print("get result : ", match_obj.group()) print("match第一个括号内匹配的 : ", match_obj.group(1)) print("match第二个括号内匹配的 : ", match_obj.group(2)) else: print("No match!!") match: 从头开始匹配,一旦匹配不成功便退出 search: 也说从头开始匹配,它是层级关系的匹配,是吧匹配对象分成一个个子字符串来匹配,返回第一个匹配成功对象 效率: match快,侧重点不一样 re.findall对于搜索对象找到所有满足匹配规则条件的子字符串,并返回一个列表 1、返回一个列表,列表中是满条件的所有的子字符串,而不是对象 2、直接把内容返回,不是一个对象 import re s = 'abc_123_hn-96%_78' res_m =

python正则

安稳与你 提交于 2019-12-29 21:32:44
\d 匹配一个数字 \w 匹配一个字母或数字 . 匹配任意字符 * 表示任意个字符(包括0个), + 表示至少一个字符 ? 表示0个或1个字符 ^ 表示行的开头 $ 表示行的结束 \s 匹配一个空格(也包括Tab等空白符) \s+ 表示至少有一个空格 | A|B可以匹配A或B,所以(P|p)ython可以匹配'Python'或者'python'。 {n} 表示n个字符 {n,m} 表示n-m个字符 - 是特殊字符,在正则表达式中,要用'\'转义 [a-zA-Z\_][0-9a-zA-Z\_]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。    s = 'ABC\\-001' # Python的字符串 # 对应的正则表达式字符串变成: # 'ABC\-001' 使用Python的 r 前缀,就不用考虑转义的问题了: s = r'ABC\-001' # Python的字符串 # 对应的正则表达式字符串不变: # 'ABC\-001' re.match(r'^\d{3}\-\d{3,8}$', '010-12345') 切分字符串 用正则表达式切分字符串比用固定的字符更灵活,请看正常的切分代码: >>> 'a b c'.split(' ') ['a', 'b', '', '', 'c'] 识别连续的空格,用正则表达式: >>> re

Python之re正则模块

人盡茶涼 提交于 2019-12-29 21:31:55
正则表达式可以帮助我们更好的描述复制的文本格式,可以更好地利用它们对文本数据进行检索、替换、提取和修改操作。 http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html http://docs.python.org/2.7/library/re.html#module-re 1、 re入门 第一步:先要引入有关正则表达式的包: #-*- coding: utf-8 -*- import re 第二步:使用指定的正则表达式构建一个正则表达式对象,下面正则是用来搜索长度为10的a-z的英文字母 #-*- coding: utf-8 -*- import re regex = re.compile(r'[a-z]{10}') 第三步:根据正则表达式指定数据中检索匹配项,如果匹配IsMatch方法就会返回true #!/usr/bin/env python26 #-*- coding:utf-8 -*- import re regex = re.compile(r'[a-z]{10}') m1 = re.match(regex,'1234567890') m2 = re.match(regex,'abcdefghij') if m1: print "m1 match" if m2: print "m2 match" 2

python正则替换非数字字符源码演示

女生的网名这么多〃 提交于 2019-12-27 21:52:49
把内容过程中比较重要的一些内容段备份一次,下面内容段是关于python正则替换非数字字符演示的内容,应该对码农们有用途。 #!/usr/bin/python import re phone = "2004-959-559 # This is Phone Number" # Delete Python-style comments print "Phone Num : ", num # Remove anything other than digits num = re.sub(r'D', "", phone) print "Phone Num : ", num 执行结果如下 Phone Num : 2004-959-559 Phone Num : 2004959559 来源: 51CTO 作者: Cool_Manone 链接: https://blog.51cto.com/14101311/2390223

类和正则表达

断了今生、忘了曾经 提交于 2019-12-20 08:49:26
类的三个基本特征:封装,继承,多态; 封装 封装就是事物抽象为类,把对外接口暴露,将实现和内部数据隐藏。 继承 面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”。 被继承的类称为“基类”、“父类”或“超类”。 继承的过程,就是从一般到特殊的过程。 要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。 在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。 继承概念的实现方式有三类:实现继承、接口继承和可视继承。 实现继承是指使用基类的属性和方法而无需额外编码的能力; 接口继承是指仅使用属性和方法的名称,但是子类必须提供实现的能力; 可视继承是指子类使用基类的外观和实现代码的能力。 多态性 是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。 实现多态,有二种方式,覆盖,重载。 覆盖,是指子类重新定义父类的虚函数的做法。 重载,是指允许存在多个同名函数

python正则中的贪婪与非贪婪

允我心安 提交于 2019-12-19 20:41:29
当重复一个正则表达式时,如用 a*,操作结果是尽可能多地匹配模式。当你试着匹配一对对称的定界符,如 HTML 标志中的尖括号。匹配单个 HTML 标志的模式不能正常工作,因为 .* 的本质是“贪婪”的 >>> s = '<html><head><title>Title</title>' >>> len(s) 32 >>> print re.match('<.*>', s).span() (0, 32) >>> print re.match('<.*>', s).group() <html><head><title>Title</title> RE 在 "<html>" 中 匹配 "<",.* 会消耗掉字符串的剩余部分。RE 中保持更多的向左匹配, 不能在字符串结尾匹配“>”,因此正则表达式必须一个字符一个字符地回溯,直到它找到 > 的匹配。最终的匹配从 "<html" 中的 "<" 到 "</title>" 中的 ">",这变成了全文匹配,并不是你想要的结果。 在这种情况下,解决方案是使用不贪婪的限定符 *?、+?、?? 或 {m,n}?,尽可能匹配小的文本。在上面的例子里,在第一个 "<" 之后立即尝试匹配 ">",当它失败时,引擎一次增加一个字符,并在每步重试 匹配">"。这个处理将得到正确的结果: >>> print re.match('<.*?>', s).group()

python爬虫--正则解析方式

巧了我就是萌 提交于 2019-12-14 23:53:15
一.正则解析: 提取数据步骤:创建正则对象-->匹配查找-->提取数据保存; 知识点: 1.单字符: . : 除换行以外所有字符 [] :[aoe] [a-w] 匹配集合中任意一个字符 \d :数字 [0-9] \D : 非数字 \w :数字、字母、下划线、中文 \W : 非\w \s :所有的空白字符包,括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 \S : 非空白 2.数量修饰: * : 任意多次 >=0 + : 至少1次 >=1 ? : 可有可无 0次或者1次 {m} :固定m次 hello{3,} {m,} :至少m次 {m,n} :m-n次 3.边界: $ : 以某某结尾 ^ : 以某某开头 4.分组: (ab) 贪婪模式 .* 非贪婪(惰性)模式 .*? re.I : 忽略大小写 re.M :多行匹配 re.S :单行匹配 re.sub(正则表达式, 替换内容, 字符串) 应用举例一: import re line = "bobby123" regex_str = "^b.*" # 必须以b开头,任意字符匹配 (^控制开头字符) regex_str1 = "^b.3$" #(.*3$)必须以3结尾; (^b.3$)不能运行成功,若改为(^b.*3$)则可以; ($控制结位字符,.表示匹配任意字符,*表示匹配的次数) if re.match(regex

Python正则表达式指南

余生颓废 提交于 2019-12-12 21:01:12
正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能不一样,不过只要学会了任意一门语言的正则表达式用法,其他语言中大部分也只是换了个函数的名称而已,本质都是一样的。下面,我来介绍一下python中的正则表达式是怎么使用的。   首先,python中的正则表达式大致分为以下几部分: 元字符 模式 函数 re 内置对象用法 分组用法 环视用法   所有关于正则表达式的操作都使用 python 标准库中的 re 模块。 一、元字符 (参见 python 模块 re 文档) . 匹配任意字符(不包括换行符) ^ 匹配开始位置,多行模式下匹配每一行的开始 $ 匹配结束位置,多行模式下匹配每一行的结束 * 匹配前一个元字符0到多次 + 匹配前一个元字符1到多次 ? 匹配前一个元字符0到1次 {m,n} 匹配前一个元字符m到n次 \\ 转义字符,跟在其后的字符将失去作为特殊元字符的含义,例如\\.只能匹配.,不能再匹配任意字符 [] 字符集,一个字符的集合,可匹配其中任意一个字符 | 逻辑表达式 或 ,比如 a|b 代表可匹配 a 或者 b (...) 分组,默认为捕获,即被分组的内容可以被单独取出,默认每个分组有个索引,从 1 开始,按照"(