Python正则表达式

正则表达式中的一些符号:

 " . "是可以匹配到任意一个字符.

 " * "可以匹配到前面字符的0或很多,例如b*能匹配到一个b或者bbbb+个.

" ^ "是开头匹配模式 ,例如^b.*就是匹配以开头为b的任意长度字符串,可以匹配到‘ ba ’也可以匹配到‘basdwa’。

"$"结尾匹配,例如b$就是以b结尾的字符串。可以匹配到 'asdasb' 或者 'asb'也可以是'b'

结合上面的符号我们进行一个例子:

import re  #导入re模块

line = "bobby123"  #需要匹配的字符串

# 下面的 ^b.*3$ 大意是:以b开头,以3结尾,中间任意长度的字符串。

model="(^b.*3$)"  #匹配模式,其中的圆括号()是提取字串。

result = re.match(model, line) #match是re模块其中的一个匹配函数,第一个参数是匹配模式,第个参数是匹配字符串

if result:

    print("true") #输出true   #结果为bobby123

其中的圆括号是正则表达式的组,例如你想对网址www.baidu.com进行字符串baidu提起,而不想拿到前面的‘www.'和'.com'的话。只要把需要的部分用圆括号括起来就好了,例如匹配模式可以这么写" .*(baidu).* " 看下面代码例子:

import re

line = "www.baidu.com"

model=".*(baidu).*"

result= re.match(model, line)

print(result.group(1)) #结果为' baidu '


其中的result(1)就是对组里面的不同组进行提取,例如上面的"www.baidu.com"就是result(0)整个字符串。


“?”是非贪婪模式,根据字符串去匹配最大的长度。为了说明这个字符我们先来看一下什么是贪婪模式:

#贪婪模式

#贪婪匹配模式,反向匹配,就是从右到左开始进行匹配

line = "bobby123" #我们要从此字符串中提取bob

model=".*(b.*b).*" #这段意思是:通过圆括号提取第一个字符是b,中间任意长度字符,结尾是b的字符串。

result= re.match(model, line)

print(result.group(1)) #结果为'bb ' 

非贪婪模式:

 line = "bobby123" 

model=".*?(b.*?b).*"  #非贪婪模式,会让匹配从左到右开始匹配

result= re.match(model, line) 

print(result.group(1)) #结果为'bob' ,如果你要是把圆括号里面的问号去掉匹配到的就是bobb了




"+"至少匹配一次和多次

line = 'aabbbbbaa'

model =".*(b.+b).*" 

result= re.match(model, line) 

print(result.group(1))#结果为bbb,如果改为model =".*?(b.+b).*"  结果为bbbbb



#“{数字}”前面字符串出现的次数

model=".*(b.{1}b).*"   #中间的字符只能出现一次 例如 能匹配到'bab'或'bcb',但不能匹配到'basb'或'basdsadb'

model=".*(b.{1,}b).*" #中间字符串能出现1次到多次,例如:能匹配到'bab'或'bcb',也能匹配到匹配到'basb'或'basdsadb'

model=".*(b.{1,3}b).*" #中间字符串最少1次最多3三次,例如'bab''baab''baaab'




#“|”或的意思

model="bobby|bobby123" #匹配bobby 或者bobby123

model="(boby|bobby)123" #匹配boby123 或者bobby123



“[]”括号是任意一个数进行匹配

例子1:

model="[abcd]obby123"

#上面这种模式智能匹配到'aobby123','bobby123','cobby123','dobby123'

例子2:

line = "17784667413" #对电话号码提取

model="1[48357][0-9]{9}"

#以1开头第二位数必须要是48357中的一位,[0-9]是匹配0到9之间的任意数字,{9}可以出现9次

#[^]括号里放尖括号就是反的意思

例如[^1]匹配到非1的字符

line = "17" 

model = "1[^7]"

y=re.match(model, line) 

print(y.group(0)) #输出none,因为line里面含有7,如果换成别的数字就是true



[]中括号里出现的‘.’‘*’不再是任意匹配了,而是匹配‘.’‘*’一个符号而已

‘ \s ’是代表空格的意思,‘ \S ’只要不是空格,任意字符都可以,只能匹配一个.

#line = "你 好"中间有一个空格

#regex_str="你\s好"  就能匹配到 “你 好”

#line = "你很好"中间有一个空格

#regex_str="你\S好"  就能匹配到 “你很好”


"\w"任意字符相当于[A-Za-z0-9_] ,“\W”非'\w'的都可以,例如可以匹配到空格.

当然也可以通过编码匹配汉字[\u4E00-\u9FA5]

#line = "你 好"#中间有一个空格

#model="([\u4E00-\u9FA5]+)" #输出为‘你’

#因为‘你好’中间有一个空格,所以只能匹配到一个汉字。 你

#line = "你好"#中间有一个空格

#model="([\u4E00-\u9FA5]+)"  #。结果为 你好



#"\d"是匹配数字 

#line = "xxx出生于2001年"

#regex_str=".*?(\d+)"  #。拿到数字 结果为2001



混合模式

把前面的内容进行集合,我们来匹配出生日期,但写法却很不一样,例如下面这几种类型:

#line = "xxx出生于2001年6月2日"

#line = "xxx出生于2001-6-2"

#line = "xxx出生于2001-06-2日"

#line = "xxx出生于2001-06"

model=".*出生于(\d{4}[年/-]\d{1,2}([月/-]\d{1,2}.|[月/-]$|\d{1,2}.|$|[月/-]\d{1,2}))" match_obje = re.match(model, line)

if match_obje:

    print(match_obje.group(1)) 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • re模块手册 本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以...
    喜欢吃栗子阅读 3,993评论 0 13
  • python的re模块--细说正则表达式 可能是东半球最详细最全面的re教程,翻译自官方文档,因为官方文档写的是真...
    立而人阅读 22,846评论 4 46
  • Python中的正则表达式(re) import rere.match #从开始位置开始匹配,如果开头没有则无re...
    BigJeffWang阅读 7,064评论 0 99
  • 一、正则表达式语法 正则表达式是用匹配或者描述字符串的工具。 用处:a.判断字符串是否满足某个条件---判断输入的...
    大漠判官1阅读 351评论 0 1
  • 不做练习都不好意思过来,我这次终于来了!上周信誓旦旦地说,一定会完成练习,结果最后...呃...而且还被逗砂姐姐发...
    隐身的小猴阅读 161评论 0 0