python 基础学习 正则表达式1(规则)

正则表达式:

*正则表示式(或RE)是一种小型的、高度专业化的编程语言,(在python中)它内嵌在python中,并通过re模块实现。

-可以为想要匹配的相应字符串指定规则

-该字符串集可能包含英文语句、e-mail地址、命令或任何你想要的东西

-可以问诸如“这个字符串匹配该模式吗?”

-“在这个字符串中是否有部分匹配该模式呢?”

-你也可以使用re以各种方式来修改或分隔字符串

*正则表达式模式被编译成一系列的字节码,然后由用c编写的匹配引擎执行

*正则表达式语言相对小型和受限(功能有限)

    -并非所有字符串处理都能用正则表达式完成

*字符匹配

    -普通字符

        -大多数字母和字符一般都会和自身匹配

        -如正则表达式test会和字符串"test“完全匹配

    -元字符

        . ^ $ * + ? {} \ | ( )

=============================================================

.[]

-常用来指定一个字符集:[abc];[a-z]

-元字符在字符集中不起作用:【akm$】

-补集匹配不在区间范围内的字符:【^5】

范例:

>>> import re
#在python中如果想使用正则表示式,需先导入re模块,re模块中有许多方法
#定义正则表达式其实就是定义一个字符串 :s = "abc" ,但这个没有任何意义
#通常定义表达式时要加一个r : s = r"abc" 来定义这个正则表达式的字符串
>>> s = r"abc"      #这个可以理解为规则
>>> re.findall(s,‘aaaaaaa‘)
[]
#re.findall方法将规则s比较字符串‘aaaaaaa‘,因为没有abc,所以返回为空
>>> re.findall(s,‘abcddabc‘)
[‘abc‘, ‘abc‘]
#最原始的匹配,通过普通字符匹配到自身
>>> st = "top tip tqp twp tep"
>>> s = r"top"
>>> re.findall(s,st)
[‘top‘]
>>> s = r"t[oe]p"
>>> re.findall(s,st)
[‘top‘, ‘tep‘]
#【制定一个字符集】 t开头,p结尾,中间是o或e中的一个
>>> s = r"t[^oe]p"
>>> re.findall(s,st)
[‘tip‘, ‘tqp‘, ‘twp‘]
【^匹配不在区间范围内的字符】,取反

.^

-匹配行首。除非设置MULTILINE标志,它只是匹配字符串的开始,在MULTILINE模式里,它也可以直接匹配字符串中的每个换行。

>>> s = r‘hello‘
>>> b = ‘hello world,hello boy‘
>>> re.findall(s,b)
[‘hello‘, ‘hello‘]
>>> s = r‘^hello‘                   
>>> re.findall(s,b)
[‘hello‘]
>>> b = ‘ world,hello boy‘
>>> re.findall(s,b)
[]
【^表示行首】

.$

-匹配行尾,行尾被定义为要么是字符串尾,要么是一个换行字符后面的任何位置。

>>> s = r‘boy$‘
>>> re.findall(s,b)
[‘boy‘]

#注意【】中出现元字符    元字符在字符集中不起作用

>>> t = r‘t[abc$]‘    #匹配以a 或b 或c 为结尾的字符串
>>> re.findall(t,‘ta‘)
[‘ta‘]
>>> re.findall(t,‘t$‘)
[‘t$‘]                         #未生效
>>> t = ‘t[^ab]‘
>>> re.findall(t,‘ab‘)
[]                               #取反
>>> r = ‘t[abc^]‘
>>> re.findall(r,‘t^‘)
[‘t^‘]

更多用法:匹配一个范围,写法[0-9]、[a-zA-Z]\[a-zA-Z0-9]

>>> s = r‘x[0123456789]x‘
>>> l = ‘x1x x22x xxx‘
>>> re.findall(s,l)
[‘x1x‘]
>>> s = r‘x[0-9]x‘
>>> re.findall(s,l)
[‘x1x‘]

.\转义字符

-反斜杠后面可以加不同的字符以表示不同特殊意义

-也可以用于取消所有的元字符:\[ 或\\

\d 匹配任何十进制数: 相当于类[0-9]

\D 匹配任何非数字字符:相当于类[^0-9]

\s 匹配任何空白字符:它相当于类[\t\n\r\f\v]

\S 配配任何非空白字符: 它相当于类[^\t\n\r\f\v]

\w匹配任何字母数字字符:它相当于类[a-zA-Z0_9_]

\W匹配任何字母数字字符:它相当于类[^a-zA-Z0_9_]

范例:

>>> s = r‘x\dx‘
>>> l = ‘x1x x22x xxx‘
>>> re.findall(s,l)
[‘x1x‘]
#如有多次重复可以使用{次数}
>>> r=r"010-\d\d\d\d\d\d\d\d"
>>> re.findall(r,‘010-87568745‘)
[‘010-87568745‘]
>>> r=r"010-\d{8}"
>>> re.findall(r,‘010-87568745‘)
[‘010-87568745‘]
>>> re.findall(r,‘010-8756874‘)
[]

.重复 {次数}

-正则表达式第一功能是能够匹配不定长的字符集,另一个功能就是你可以指定正则表达式的一部分的重复次数

>>> import re
>>> s =r‘^010-\d{8}‘
>>> re.findall(s,‘010-36854625‘)
[‘010-36854625‘]

.*

-指定前一个字符可以被匹配零次或更多次,而不是只有一次。匹配引擎会试着重复尽可能多的次数(不超过整数界定范围,20亿)

>>> a=r‘ab*‘
>>> re.findall(a,‘abbbbbb‘)
[‘abbbbbb‘]
>>> re.findall(a,‘a‘)
[‘a‘]

.+

-表示匹配一次或更多次

-注意*和+之间的不同;*零次到多次。+至少一次;

>>> a=r‘ab+‘
>>> re.findall(a,‘accccccccb‘)
[]
>>> re.findall(a,‘accccccccbab‘)
[‘ab‘]

.?

-表示将前一个符号重复0次或1次

#用于表示某事物是可选的。

>>> s=r‘^010-?\d{8}$‘
>>> re.findall(s,‘010-12345678‘)
[‘010-12345678‘]
>>> re.findall(s,‘01012345678‘)
[‘01012345678‘]
>>> re.findall(s,‘01012345678abc‘)
#此处同时需要注意$的使用

.+?

-最小匹配模式

>>> s=r‘ab‘
>>> re.findall(s,‘abbbbababb‘)
[‘ab‘, ‘ab‘, ‘ab‘]

.{m,n}

    -其中m和n是十进制整数。该限定符的意思是至少有m个重复,至多到n次重复。

>>> s=r‘ab‘
>>> re.findall(b,‘abbbbbababb‘)
[‘abbb‘, ‘ab‘, ‘abb‘]

    -忽略m会认为下边界是0,而忽略n的结果将是上边界为无穷大(实际上是20亿)

    -{0,}等同于*,{1,}等同于+,而{0,1}则与?相同

>>> s=r‘ab{1,}‘
>>> d=r‘ab+‘
>>> re.findall(s,‘abbbbababb‘)
[‘abbbb‘, ‘ab‘, ‘abb‘]
>>> re.findall(d,‘abbbbababb‘)
[‘abbbb‘, ‘ab‘, ‘abb‘]
时间: 2024-09-29 00:57:57

python 基础学习 正则表达式1(规则)的相关文章

python 基础学习 正则表达式2(使用)

~使用正则表达式   - re模块提供了一个正则表达式引擎的接口,可以让你将REstring编译成对象并用他们来进行匹配. #如果经常使用,建议编译 compile 范例: >>> r1=r'^\d{3,4}-?\d{8}' >>> re.findall(r1,'010-12345678') ['010-12345678'] >>> p_tel=re.compile(r1)   #正则编译,变为对象,利用re模块里的complie方法对r1编译: &g

python基础学习09(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #什么是函数 #就是引用,创建,使用 #例子 def foo(): print '233' foo() #返回与函数类型 def foo1():#是一个过程 print 'hello world!' foo1() foo

python基础学习2

python中的运算符 1.算术运算符:用来做算术运算的符号 ①.+ :求和,也可以做连接符 ②. - :求差 ③. * : 求积 ④. / :求商 ⑤.% :取余 ⑥.//  :取整 ⑦.**  :次方 注意:只能是数值 print(3*3) #求积结果:9 print(9/2) #相除结果:4.5 print(3**4) #3的4次方,结果:81 print(9//4) #小数部分直接丢掉,取整结果:2 print(13%3) #取余结果:1 运行结果是 9 4.5 81 2 1 比较运算符

python基础学习 第十七天 (一)

python基础学习 第十七天 (一) 一. 类与类之间的关系 ?千世界, 万物之间皆有规则和规律. 我们的类和对象是对?千世界中的所有事物进?归类. 那事物之间存在着相对应的关系. 类与类之间也同样如此. 在?向对象的世界中. 类与类中存在以下关系:我们会使用这个关系就行,不用扣这写名词 依赖关系 组合关系 继承关系(类的三大特性之一:继承.) 1.1 依赖关系 ?先, 我们设计?个场景. 夏天到了大象很热,大象想到冰箱中. 注意. 在这个场景中, 其实是存在了两种事物的. ?个是?象, ?象

python基础学习日志day5-各模块文章导航

python基础学习日志day5---模块使用 http://www.cnblogs.com/lixiang1013/p/6832475.html python基础学习日志day5---time和datetime模块 http://www.cnblogs.com/lixiang1013/p/6848245.html python基础学习日志day5---random模块http://www.cnblogs.com/lixiang1013/p/6849162.html python基础学习日志da

Python 基础学习 网络小爬虫

<span style="font-size:18px;"># # 百度贴吧图片网络小爬虫 # import re import urllib def getHtml(url): page = urllib.urlopen(url) html = page.read() return html def getImg(html): reg = r'src="(.+?\.jpg)" pic_ext' imgre = re.compile(reg) imgli

python基础学习05(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #dict{键:值} #哈希 #注:字典是无顺序的,所以你懂的 #创建与赋值 dict1={} dict2={'name':'apply','avg':24,'sex':'man'} print dict1,dict2

Python基础学习(九)

Python 多线程 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度 程序的运行速度可能加快 在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比较有用了.在这种情况下我们可以释放一些珍贵的资源如内存占用等等. 线程在执行过程中与进程还是有区别的.每个独立的线程有一个程序运行的入口.顺序执行序列和程序的出口.

python基础学习07(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #file与input output #文件对象 #简单说来,就是写入和读取的方式 #file(),open()2个操作都是一样的,一般推荐open() #语法 # open(name[, mode[, bufferin