python 正则表达式匹配

(一) 什么是正则表达式

通俗理解:按照一定的规则,从某个字符串中匹配出想要的数据。这个规则就是正则表达式

 (二)正则匹配在工作的运用

python的正则匹配模块在我们日常的工作中经常被运用到,比如说:爬虫,处理数据之间的依赖关系,提取海量数据等等,在测试也运用的比较广泛,比如接口测试,我们要处理接口的数据依赖关系,通常来说就是关联,目前可以通过python字典方式取值,同时也可以通过python的re模块正则表达式老解决该问题。运用的场景广泛,是一名测试人员必须掌握的知识点。

(三)python正则匹配案例

import re

# 匹配某一个字符:

text ='hello world'

ret = re.match('hello',text)

print(ret.group())

# 点(.)匹配任意的字符:

text ="abcd"

ret = re.match('.',text)

print(ret.group())

#\d匹配任意的数字:

text ='233445'

ret = re.match('\d',text)

print(ret.group())

#\D匹配任意的非数字:

text ='abcd'

ret = re.match('\D',text)

print(ret.group())

#\s匹配的是空字符(包括: \n, \t, \r 和空格):

text ="\t"

ret = re.match('\s',text)

print(ret.group())

#\w匹配的是a-z和A-Z以及数字和下划线

text ="_"

ret = re.match('\w',text)

print(ret.group())

#\W的匹配是和\w相反

text ="+"

ret = re.match('\W',text)

print(ret.group())

#[]组合的方式,只要满足中括号中的某一项都算匹配成功:

text ="7848-7837923"

ret = re.match('[\d\-]+',text)

print(ret.group())

#之前讲到的几种匹配规则,其实可以使用中括号的形式来进行替代:

# \d:[0-9]

# \D: 0-9

# \w:[0-9a-zA-Z]

# \W:[^0-9a-zA-Z]

#匹配多个字符:

text ="6348894"

ret = re.match('\d*',text)

print(ret.group())

#+:可以匹配1个或者多个字符。最少一个。示例代码如下:

text ="abcd"

ret = re.match('\w+',text)

print(ret.group())

# text =""

# ret =re.match('\w+',text)

# print(ret.group())

#?:匹配的字符可以出现一次或者不出现(0或者1)。示例代码如下:

text ="123"

ret = re.match('\d?',text)

print(ret.group())

# {m}: 匹配m个字符。示例代码如下

text ="123456"

ret = re.match('\d{5}',text)

print(ret.group())

#{m,n}: 匹配m-n个字符。在这中间的字符都可以匹配到。实例代码如下:

text ="1234556"

ret = re.match('\d{1,5}',text)

print(ret.group())

#案例验证手机号码:手机号码的规则是以1开头,第二位可以是345879,后面那9位就可以随意了。示例代码如下:

text ="15526236892"

ret = re.match('1[345879]\d{9}',text)

print(ret.group())

# 验证邮箱:邮箱的规则是邮箱名称是用数字,字母,下划线组成的,然后是@符号,后面就是域名了。示例代码如下:

text ="hynever@163.com"

ret = re.match('\w+@\w+\.[a-zA-Z\.]+',text)

print(ret.group())

text ="xiaolufei1101@163.com"

ret = re.match('\w+@\w+\.[0-9a-zA-Z]+',text)

print(ret.group())

#验证URL:URL的规则是前面的是http或者https或者是ftp然后再加上一个冒号,再加上一个斜杠,再后面就是可以出现任意非空白字符了。示例代码如下:

text ="https://www.google.com/"

ret = re.match('(http|https|ftp)://[^\s]+',text)

print(ret.group())

#验证身份证:身份证的规则是,总共有18位,前面17位都是数字,后面一位可以是数字,也可以是小写的x,也可以是大写的X。示例代码如下:

text ="431021199410014849"

ret = re.match('\d{17}[\dxX]',text)

print(ret.group())

# ^(脱字号):表示以..开始:

text ="hello world"

ret = re.match('^h',text)

print(ret.group())

# $:表示以...结束

# 匹配163.com的邮箱

text ="xxx@163.com"

ret = re.search('\w+@163\.com$',text)

print(ret.group())

#|:匹配多个表达式或者字符串:

text ="hello|world"

ret = re.search('hello',text)

print(ret.group())

#贪婪模式:正则表达式会匹配尽量多的字符。默认是贪婪模式。

#非贪婪模式:正则表达式会尽量少的匹配字符。

# 贪婪模式

text ="012345567789"

ret =re.match('\d+',text)

print(ret.group())

# 非贪婪模式

text ="08473847398479"

ret = re.match('\d+?',text)

print(ret.group())

# 匹配0-109之间的数字

text ='109'

ret = re.match('[1-9]?\d$|109$',text)

print(ret.group())

#转义字符和原生字符串:

#在正则表达式中,有些字符是有特殊意义的字符。因此如果想要匹配这些字符,那么就必须使用反斜杠进行转义。比如$代表的是以...结尾,如果想要匹配$,那么就必须使用\$。示例代码如下:

text ="apple price is \$99, orange paice is $88"

ret = re.search('\$(\d+)',text)

print(ret.group())

#原生字符串:

#在正则表达式中,\是专门用来做转义的。在Python中\也是用来做转义的。因此如果想要在普通的字符串中匹配出\,那么要给出四个\。示例代码如下:

text ="apple \c"

ret = re.search('\\\\c',text)

print(ret.group())

text ="apple \c"

ret = re.search(r'\\c',text)

print(ret.group())

# match:从开始的位置进行匹配。如果开始的位置没有匹配到。就直接失败了。示例代码如下:

text ='hello'

ret = re.match('h',text)

print(ret.group())

# 如果想要匹配换行的数据,那么就要传入一个flag=re.DOTALL,就可以匹配换行符了,代码示例:

text ="abc\nabc"

ret = re.match('abc.*abc', text, re.DOTALL)

print(ret.group())

# search:在字符串中找满足条件的字符。如果找到,就返回。说白了,就是只会找到第一个满足条件的

text ='apple price $99 orange price $88'

ret = re.search('\d+',text)

print(ret.group())

# 在正则表达式中,可以对过滤到的字符串进行分组。分组使用圆括号的方式。

# group:和group(0)是等价的,返回的是整个满足条件的字符串。

# groups:返回的是里面的子组。索引从1开始。

# group(1):返回的是第一个子组,可以传入多个。

text ="apple price is $99,orange price is $10"

ret = re.search(r".*(\$\d+).*(\$\d+)",text)

print(ret.group())

print(ret.group(0))

print(ret.group(1))

print(ret.group(2))

print(ret.groups())


参考资料:https://study.163.com/course/courseMain.htm?courseId=1004590003(知了课堂)

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

推荐阅读更多精彩内容

  • 正则表达式、re模块、匹配单个字符、匹配多个字符、匹配开头结尾、匹配分组、re模块的高级用法、python贪婪和非...
    Cestine阅读 1,417评论 0 1
  • 1.正则表达式概述 正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regula...
    TENG书阅读 832评论 0 1
  • 类 !/usr/bin/python -- coding: UTF-8 -- class Employee:'所有...
    SkTj阅读 943评论 0 0
  • 什么是正则表达式: 通俗理解:按照一定的规则,从某个字符串中匹配出想要的数据。这个规则就是正则表达式。标准答案:h...
    朝南而行_阅读 984评论 0 2
  • 一、总体内容 1.1、正则表达式概述 1.2、re 模块 1.3、匹配单个字符 1.4、匹配多个字符 1.5、匹配...
    IIronMan阅读 658评论 0 4