python与正则表达式

1.正则表达式

  正则,只跟字符串相关,就是匹配字符串内容的一种规则。

  正则主要有两部分组成,要查找字符的类型,以及要查找字符的数量。(自己的理解)

  字符的类型:(相当于你要找的部分内容)

  

元字符
匹配内容
匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线
\s 匹配任意的空白符
\d 匹配数字
\n 匹配一个换行符
\t 匹配一个制表符
\b 匹配一个单词的结尾
^ 匹配字符串的开始
$ 匹配字符串的结尾
\W
匹配非字母或数字或下划线
\D
匹配非数字
\S
匹配非空白符
a|b
匹配字符a或字符b
()
匹配括号内的表达式,也表示一个组
[...]
匹配字符组中的字符
[^...]
匹配除了字符组中字符的所有字符

  代表数量的量词:(相当于你要找的部分内容对应的个数)

    

量词
用法说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

  示例:

  ‘d\d+\w{3,6}p‘   这个正则表达式代表的是:以d开头,后边是数字,数量是1个或者多个,后边是字母、数字、下划线,数量是3-6个,然后以一个p结尾。

  备注:这里都是默认为贪婪模式,数量能找到满足条件的多个,就找多个,非贪婪模式的是在表达数字的后边加‘?’号。如右:‘d\d+?\w{3,6}?p‘

  代表要查找字符位置的符号:

  ^ 和 $ : ^代表在字符串的开头出现,$ 代表在字符串的末尾出现。

  示例 

  string = ‘海燕海东海西‘

  ^海.   会匹配到 开头的‘海燕’  ,全部的意思是:匹配开头是海这一个字,后边跟一个除换行符之外的一个字符。

  海.$   会匹配到结尾的‘海西’ ,全部的意思是 :匹配结尾的海+一个除换行符之外的一个字符。

  字符集[][^]

  [ ]  表示这一个位置可能出现的字符,注意是一个位置,表示多个位置的话,可以是 [ ]*,或者 [ ]+ 等[ ]后边跟量词

  [ ^ ]  表示取非,即这一个位置可能出现的字符除了括号内的,

  

   分组 ()与 或 |

  示例:

  () 表示把一些字符看成一个整体,  | 是或的意思。

  ([1-9]\d{16}[0-9x]|[1-9]\d{14})   表示先匹配[1-9]\d{16}[0-9x]如果没有匹配上就匹配[1-9]\d{14}

2.Python 下的正则表达式—— re 模块 

  re模块常用方法:findall、search、 match、 split、 sub、

  re.findall(pattern,) 

  查找满足条件的字符串,返回一个列表,元素是每一个找到的子字符串,

1 示例:
2 str = ‘fhsjdhal66478636666guy66666hhfieyhf‘
3 ret5 = re.findall(‘\d{4,6}?‘,str)
4 print(ret5)

结果:[[‘6647‘, ‘8636‘, ‘6666‘]]   # 此处是非贪婪模式

  findall中有个分组优先的原则:

# 如果没有分组,是这样子的:
str = ‘11512319890965443xhfauh630289768776545678ucufy‘
ret5 = re.findall(‘[0-9]\d{5}\d{8}\d{3}[0-9x]‘,str)
# ret5 = re.findall(r‘[1-9]\d{16}[0-9x]‘,str)
print(ret5)

结果是:
>>> [‘11512319890965443x‘, ‘630289768776545678‘]

假如我分组了,就会返回组里边的信息,
str = ‘62012319890965443xhfauh630289768776545678ucufy‘
ret5 = re.findall(‘[0-9]\d{5}(\d{8})\d{3}[0-9x]‘,str)
# ret5 = re.findall(r‘[1-9]\d{16}[0-9x]‘,str)
print(ret5)

结果是:
>>> [‘19890965‘, ‘76877654‘]

其实其他位置的也匹配到了,只是没有显示出来而已。

  re.resarch()

  在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,通过.group()方法调用。

1 ret = re.search(‘a‘, ‘eva egon yuan‘).group()
2 print(ret)
3 #结果 : ‘a‘

  re.math()

  在字符串开始处进行匹配,如果不在开头,则会报错,如找到,返回的跟search一样。

1 ret = re.match(‘a‘, ‘abc‘).group()
2 print(ret)
3
4 #结果 : ‘a‘

  re.finditer() 

  返回一个存放匹配结果的迭代器

1 import re
2 ret = re.finditer(‘\d‘, ‘ds3sy4784a‘)   #finditer返回一个存放匹配结果的迭代器
3 print(ret)  # <callable_iterator object at 0x10195f940>
4 print(next(ret).group())  #查看第一个结果
5 print(next(ret).group())  #查看第二个结果
6 print([i.group() for i in ret])  #查看剩余的左右结果

  re.split  返回一个切割之后的列表。

  ret = re.split(‘[ab]‘, ‘abcd‘)

  # 先按‘a‘分割得到‘‘和‘bcd‘,在对‘‘和‘bcd‘分别按‘b‘分割 print(ret) # [‘‘, ‘‘, ‘cd‘]   注意这里  

  split的优先级查询

ret=re.split("\d+","eva3egon4yuan")
print(ret) 

#结果 : [‘eva‘, ‘egon‘, ‘yuan‘]

ret=re.split("(\d+)","eva3egon4yuan")
print(ret)

#结果 : [‘eva‘, ‘3‘, ‘egon‘, ‘4‘, ‘yuan‘]

#在匹配部分加上()之后所切出的结果是不同的,
#没有()的没有保留所匹配的项,但是有()的却能够保留了匹配的项,
#这个在某些需要保留匹配部分的使用过程是非常重要的。

  re模块其他的方法:

  sub 替换 、compile()编译成一个对象

ret = re.sub(‘\d‘, ‘H‘, ‘eva3egon4yuan4‘, 1)
#将数字替换成‘H‘,参数1表示只替换1个
print(ret) #evaHegon4yuan4

ret = re.subn(‘\d‘, ‘H‘, ‘eva3egon4yuan4‘)
#将数字替换成‘H‘,返回元组(替换的结果,替换了多少次)
print(ret)

obj = re.compile(‘\d{3}‘)  #将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字
ret = obj.search(‘abc123eeee‘) #正则表达式对象调用search,参数为待匹配的字符串
print(ret.group())
 #结果 : 123

  

  

  

时间: 2024-10-12 22:55:01

python与正则表达式的相关文章

python 中正则表达式

. 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 代码/语法 说明 * 重复零次或更多次 + 重复一次或更多次 ? 重复零次或一次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次 [aeiou]就匹配任何一个英文元音字母,[.?!]匹配标点符号(.或?或!). [0-9]代表的含意与\d就是完全一致的:一位数字:同理[a-z0-9A-Z_]也完

python用正则表达式怎么查询unicode码字符

import re data = open('a.txt') fh = open('b.txt', 'w') """Search the string begining with '['""" p = re.compile(r'\s*[\u3010]') for each_d in data: if re.match('\s*3\d{4}', each_d): each_d = each_d.strip() print(each_d + ': '

【python】正则表达式

在python中,所有和正则表达式相关的功能都包含在re模块中. $表示字符串的末尾,^表示字符串的开始,原始字符串:字符串添加前缀r,表示字符串中的所有字符都不转义.\b表示单词的边界必须在这里. s="100 BROAD" re.sub('ROAD$','RD',s) 结果:'100 BRD' re.sub(r'\bROAD$','RD',s) 结果:100 BROAD M?可选地匹配单个字符,要么一个M,要么没有M.re模块的关键是一个search函数,该函数由两个参数,一个是正

python使用正则表达式文本替换

2D客户端编程从某种意义上来讲就是素材组织,所以,图片素材组织经常需要批量处理,python一定是最佳选择,不过是win/linux/mac都有一个简单的运行环境 举两个应用场景: 如果不是在某个文件夹里面则将文件夹名称插入前面 所有的文件名名称加上一个前缀 直接看代码吧 # encoding: UTF-8 import re # 将正则表达式编译成Pattern对象 p = re.compile(r'(?P<folder>(\w+/)*)(?P<filename>\w+\.png

Python使用正则表达式替换源码前序号

从博客园或其它地方拷贝代码,经常前面有代码序号,像下面这个样子: 1 wbContent.Navigate(vURL); 2  3     Result:=GetHtml(wbContent); 4  5     while not ContainsText(Result,'共找到') do 6     begin 7       Sleep(100); 8       Application.ProcessMessages; 9       Result:=GetHtml(wbContent)

python study - 正则表达式

第 7 章 正则表达式 7.1. 概览 7.2. 个案研究:街道地址 7.3. 个案研究:罗马字母 7.3.1. 校验千位数 7.3.2. 校验百位数 7.4. 使用 {n,m} 语法 7.4.1. 校验十位数和个位数 7.5. 松散正则表达式 7.6. 个案研究:解析电话号码 7.7. 小结 正则表达式是搜索.替换和解析复杂字符模式的一种强大而标准的方法.如果你曾经在其他语言 (如 Perl) 中使用过它,由于它们的语法非常相似,你仅仅阅读一下 re 模块的摘要,大致了解其中可用的函数和参数就

Python爬虫-正则表达式

正则表达式 只提取关注的数据,进行数据赛选 原子: 基本组成单位 普通的字符 非打印支付 通用字符 普通的字符 >>> import re >>> pat="yue" >>> string="http://yum.iqianyue.com" >>> rst1=re.search(pat,string) >>> print(rst1) <_sre.SRE_Match obj

python的正则表达式 re

python的正则表达式 re 本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以是Unicode字符,这点不用担心,python会处理地和Ascii字符一样漂亮. 正则表达式使用反斜杆(\)来转义特殊字符,使其可以匹配字符本身,而不是指定其他特殊的含义.这可能会和python字面意义上的字符串转义相冲突,这也许有些令人费解.比如,要匹配一个反斜杆本身,你也许要用'\\\\'来做为正则表达式的字符串,因为正则表达式要是\\,而字符串里,每个反斜杆都要写

Python re正则表达式模块学习【转】

感谢原作者,本文转自:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 博主还有一些比较好的python文档在此一并推荐,可以移步查看. 文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程. 注意:本文基于Python2.4完成:如果看到不明白的词汇请记得百度谷歌或维基,whate

[python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】

[python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pythonpython爬虫正则表达式html知识总结 2016-04-07 06:13 3615人阅读 评论(4) 收藏 举报  分类: Python爬虫(23)  Python基础知识(17)  版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步~ 这篇文章主要是介绍Pytho