python正则表达式

【学习笔记】Python正则表达式

我是研究僧i 提交于 2020-03-03 18:07:59
一、准备知识 \d:匹配一个数字 \w:匹配一个字母 . :匹配任意字符 \s :匹配一个空格 ?表示0个或1个字符 +表示至少一个字符 *表示任意个字符(包括0个) {n}表示n个字符,{n,m}表示n-m个字符 [0-9a-zA-Z_]可以匹配一个数字、字母或者下划线 (P|p)ython可以匹配'Python'或者'python' ^py$只能匹配'py'了 二、在Python中使用 (1)匹配 import re re.match(r'^\d{3}-\d{3,8}$', '010-12345') <_sre.SRE_Match object at 0x1026e18b8> re.match(r'^\d{3}-\d{3,8}$', '010 12345') match()方法判断是否匹配,如果匹配成功,返回一个Match对象,否则返回None (2)切分字符串 import re re.split(r'[\s\,\;]+', 'a,b;; c d') ['a', 'b', 'c', 'd'] (3)提取子串 import re m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345') m.group(0) '010-12345' m.groups() ('010', '12345') m.group(1) '010' m.group

python正则表达式分组标记

瘦欲@ 提交于 2020-02-28 04:52:57
1 (?:…) 表示一个匹配不用保存的分组 >> > a = '123dd' >> > re . match ( '(?:\d+)' , a ) . groups ( ) ( ) >> > re . match ( '(\d+)' , a ) . groups ( ) ( '123' , ) >> > 2 (?P…) 使用标签表示匹配的内容,注意这里用的是groupdict() >> > re . match ( '(?P<data>\d+)' , a ) . groupdict ( ) { 'data' : '123' } >> > 3(?P=name) 引用之前已经匹配的tag >> > a = '123dd123' >> > re . match ( '(?P<data>\d+)dd(?P=data)$' , a ) . groupdict ( ) { 'data' : '123' } >> > 以上例子中,第一个data为123, 后面的data引用了上一个匹配的data,所以也得匹配 4 (?#…) 表示注释,所有内容都被忽略 >> > re . match ( '(?P<data>\d+).*?(?#this is coment)' , a ) . groupdict ( ) { 'data' : '123' } >> > 5 (?=…) 正向前视断言。仅当子表达式 …

python 正则表达式语法记录

ぐ巨炮叔叔 提交于 2020-02-25 23:01:27
The special characters are: "." Matches any character except a newline. "^" Matches the start of the string. "$" Matches the end of the string or just before the newline at the end of the string. "*" Matches 0 or more (greedy) repetitions of the preceding RE. Greedy means that it will match as many repetitions as possible. "+" Matches 1 or more (greedy) repetitions of the preceding RE. "?" Matches 0 or 1 (greedy) of the preceding RE. *?,+?,?? Non-greedy versions of the previous three special characters. {m,n} Matches from m to n repetitions of the preceding RE. {m,n}? Non-greedy version of the

python正则表达式(\S+)和 \d+的含义

余生颓废 提交于 2020-02-21 22:29:28
在jenkins jaoco生成增量覆盖率功能时: 研读的一个python通过python-git获取diff时,碰到了这两个正则符号:(\S+)、(\d+) https://github.com/raoweijian/jacoco-diff/blob/master/diff_processor.py 下面是找到的符号的说明: \d+的出处: https://books.google.com.hk/books?id=T5ncDgAAQBAJ&pg=PA192&lpg=PA192&dq=re.match(%27@@+-%5Cd%2B,%5Cd%2B+%5C%2B(%5Cd%2B),%5Cd%2B+@@%27,+line):&source=bl&ots=FrgzHyhsYi&sig=ACfU3U0Ex9AAolnnuDbQTzqw2mcvUHMkyQ&hl=zh-CN&sa=X&ved=2ahUKEwjgm5u7muLnAhWS7GEKHZLSCDEQ6AEwBHoECAkQAQ#v=snippet&q=%5Cd&f=false 书名:Learning R Programming 下面是(\S+)的说明: 来源: https://www.ntu.edu.sg/home/ehchua/programming/howto/Regexe.html 摘录: 1.10 Example:

python正则表达式(3)--match方法

孤街醉人 提交于 2020-02-17 08:02:45
1.re.match函数 re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回None。 (1)函数语法 :   re.match(pattern, string, flags=0)   函数参数说明:     pattern 匹配的正则表达式     string 要匹配的字符串     flgs 标志位,用于控制正则表达式的匹配方式   我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。   group(num=0) 获取匹配结果的各个分组的字符串,group() 可以一次输入多个组号,此时返回一个包含那些组所对应值的元组。   groups() 返回一个包含所有分组字符串的元组。   注意:如果未匹配成功, match ()返回值为None,此时再使用group()、groups() 方法会报错。       应该先获取匹配对象,然后判断匹配对象是否非空,当非空时在使用group()、groups() 方法获取匹配结果。见实例2 (2)实例 例1 import re print ( re . match (r ' How ' , ' How are you ' ) . span ( ) ) # 在起始位置匹配 print ( re . match (r ' are ' , ' How

python正则表达式统计字符串的个数

我与影子孤独终老i 提交于 2020-02-12 18:50:20
目的:通过python将pubmed下载的摘要txt文档,统计出其中的PMID数目,是否和文献总篇数一致,一致的话,就可以利用PMID的regex pattern进行分割字符串为单篇摘要文献。 import re fname = '2020-01-14_endometriosis_2020-01-01_UTF8.txt' with open(fname, "r", encoding = 'utf-8') as f: abstracts = f.read() str = abstracts iList= re.findall(r"PMID: \d+ ",str) print(len(iList)) # output: 6049,符合文档中文献的总篇数 iList= re.findall(r"PMID: \d+",str) # regex pattern中少一个空格 print(len(iList)) # output: 6050,结果比文档中文献总篇数多了一篇 致谢: python2-正则表达式统计字符串中数字的个数 来源: https://www.cnblogs.com/songbiao/p/12299991.html

Python正则表达式的元字符(匹配单个)

放肆的年华 提交于 2020-01-27 05:13:39
import reprint("---------匹配单个字符和数字--------")'''r. 匹配除换行符以外的任意字符[0123456789] []是字符集合,表示匹配中括号内包含的任意字符[windous] 匹配'w','i','n','d','o','u','s'[a-z] 匹配任意小写字母[A-Z] 匹配任意大写字母[0-9] 匹配任意数字,与[0123456789]相等[0-9a-zA-Z] 匹配任意的数字和字母[0-9a-zA-Z_] 匹配任意的数字、字母和下划线[^windous] 匹配除了'w','i','n','d','o','u','s' 这几个字母以为的所有字符 中括号中的^称为脱字符,表示不匹配集合中的字符[^0-9] 匹配所有非数字字符\d 匹配数字,效果同[0-9]\D 匹配非数字字符,效果同[^0-9]\w 匹配数字、字母和下划线,与[0-9a-zA-Z_]相同\w 匹配非(数字、字母和下划线),与[^0-9a-zA-Z_]相同 \s 匹配任意的空白符(空格,换行,换页,制表,回车) [\f\n\f\t] \S 匹配任意的空白符(空格,换行,换页,制表,回车) [^\f\n\f\t] '''print(re.search(".","dafd132154a3we1"))# . 可以充当任意符print(re.search("[0123456789]

面向对象与正则表达式的学习(自动更正,和代数运算)

删除回忆录丶 提交于 2020-01-11 03:49:41
今天我来介绍一下最近在学习的一些内容: 面向对象与正则表达式 。 对于我来说,前者相对于好理解并且比较好学习并掌握,但后者可能由于它的繁杂的表达式和浩如烟海的标识符令我有些难以掌握,但我依然有信心把它学习好了! 先来介绍一下我们的面向对象!! 先是有几个专有名词的理解: 面对对象编程(OOP:object oriented programming) : 是一种程序设计范型,同时也是一种程序开发的方法,实现OOP的程序希望能够在程序中包含各种独立而又相互调用的对象,没一个对象又都应该能够接受数据、数据处理并将数据传达给其他对象,因此每一个对象都可以被看做一个小型的机器,而整个程序块系统就是由这些小的机器相互协助、组合构建起来的。 面对对象分析(OOA:objecet ariented analysis): 即根据抽象关键的问题域来分解系统 面对对象设计(OOD:object oriented design) :是一种提供符号设计系统的面向对象的实现过程,他用非常接近时机领域属于的方法吧系统构造成现实世界的对象。 类(class) :告诉Python创建新类型的东西 对象(object) :两个意思,即最基本的东西,或者某样东西的实例 实例(instance) :这是让Python创建一个类时得到的东西 我们的python再玩法上其实有很多,当然想要编辑更多强大的代码实现更多的功能

大规模爬虫流程总结

梦想与她 提交于 2019-12-30 14:27:10
大规模爬虫流程总结 爬虫是一个比较容易上手的技术,也许花5分钟看一篇文档就能爬取单个网页上的数据。但对于大规模爬虫,完全就是另一回事,并不是1*n这么简单,还会衍生出许多别的问题。 系统的大规模爬虫流程如图所示。 先检查是否有API API是网站官方提供的数据接口,如果通过调用API采集数据,则相当于在网站允许的范围内采集,这样既不会有道德法律风险,也没有网站故意设置的障碍;不过调用API接口的访问则处于网站的控制中,网站可以用来收费,可以用来限制访问上限等。整体来看,如果数据采集的需求并不是很独特,那么有API则应优先采用调用API的方式。 数据结构分析和数据存储 爬虫需求要十分清晰,具体表现为需要哪些字段,这些字段可以是网页上现有的,也可以是根据网页上现有的字段进一步计算的,这些字段如何构建表,多张表如何连接等。值得一提的是,确定字段环节,不要只看少量的网页,因为单个网页可以缺少别的同类网页的字段,这既有可能是由于网站的问题,也可能是用户行为的差异,只有多观察一些网页才能综合抽象出具有普适性的关键字段——这并不是几分钟看几个网页就可以决定的简单事情,如果遇上了那种臃肿、混乱的网站,可能坑非常多。 对于大规模爬虫,除了本身要采集的数据外,其他重要的中间数据(比如页面Id或者url)也建议存储下来,这样可以不必每次重新爬取id。 数据库并没有固定的选择

学会Python正则表达式,就看这20个例子(整理自老表)

◇◆丶佛笑我妖孽 提交于 2019-12-26 07:53:06
1 查找第一个匹配串 import re s = 'i love python very much' pat = 'python' r = re.search(pat,s) print(r.span()) #(7,13) 2 查找所有1 s = '山东省潍坊市青州第1中学高三1班' pat = '1' r = re.finditer(pat,s) for i in r: print(i) # <re.Match object; span=(9, 10), match='1'> # <re.Match object; span=(14, 15), match='1'> 3 \d匹配数字[0-9] s = '一共20行代码运行时间13.59s' pat = r'\d+' # +表示匹配数字(\d表示数字的通用字符)1次或多次 r = re.findall(pat,s) print(r) # ['20', '13', '59'] 我们想保留13.59而不是分开,请看4 4 ?表示前一个字符匹配0或1次 s = '一共20行代码运行时间13.59s' pat = r'\d+\.?\d+' # ?表示匹配小数点(\.)0次或1次 r = re.findall(pat,s) print(r) # ['20', '13.59'] 5 ^匹配字符串的开头 s = 'This module