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 ="[email protected]"

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

print(ret.group())

text ="[email protected]"

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 ="[email protected]"

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(知了课堂)

你可能感兴趣的:(python 正则表达式匹配)