正则表达式在我们之前学习过的js语言中有过正则的表达式主要的作用是用来做的信息的验证,而我们现在的Python正则呢和js的类似,但是用法上还是有很大的区别的
Python的正则在一后的大数据的处理方面 用到的还是比较多的
什么是正则?
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
正则表达式模式
模式字符串使用特殊的语法来表示一个正则表达式:
. 匹配任意字符,除了换行符
\s 一个空格
\S 一个非空格
\d 表示一个数字
\D 表示一个非数字
\w 任意字母数字
\W 非字母数字
[a5$ t] 序列
编辑和量的符号
` 以开头,不包含
$已结尾
? 0或者1 匹配
+ 1到任意多个匹配
* 1到任意多个匹配
{n,m} n 到 m个匹配
() 组
以下实例就是正则的一种简单的用法
pattern=r'(.*) [0-9] (.*?) .*'
r'(.*) [0-9] (.*?) .*'
正则表达式的一些基本方法的使用用法:
import re
line = "Cats are smarter than dogs";
searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)
if searchObj:
print ("searchObj.group() : ", searchObj.group())
print ("searchObj.group(1) : ", searchObj.group(1))
print ("searchObj.group(2) : ", searchObj.group(2))
else:
print ("Nothing found!!")
re
line = "Cats are smarter than dogs";
searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)
if searchObj:
print ("searchObj.group() : ", searchObj.group())
print ("searchObj.group(1) : ", searchObj.group(1))
print ("searchObj.group(2) : ", searchObj.group(2))
else:
print ("Nothing found!!")
上面的示例中呢首先我们要是用正则表达式呢,我们首先需要导入正则的模块: import re
import re
基本语法: re.match(pattern, string, flags=0) :re.match只匹配字符串的开始,如果字符串开始不符合正则表达 式,则匹配失败,函数返回None
re.match(pattern, string, flags=0) :re.match只匹配字符串的开始,如果字符串开始不符合正则表达 式,则匹配失败,函数返回None
re.search(pattern, string, flags=0) :re.search匹配整个字符串,直到找到一个匹配。
.search(pattern, string, flags=0) :re.search匹配整个字符串,直到找到一个匹配。
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 |
实例:
#!/usr/bin/python3
import re
line = "Cats are smarter than dogs";
matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
print ("match --> matchObj.group() : ", matchObj.group())
else:
print ("No match!!")
matchObj = re.search( r'dogs', line, re.M|re.I)
if matchObj:
print ("search --> matchObj.group() : ", matchObj.group())
else:
print ("No match!!")
import re
line = "Cats are smarter than dogs";
matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
print ("match --> matchObj.group() : ", matchObj.group())
else:
print ("No match!!")
matchObj = re.search( r'dogs', line, re.M|re.I)
if matchObj:
print ("search --> matchObj.group() : ", matchObj.group())
else:
print ("No match!!")
以上实例运行结果如下:
No match!!
search --> matchObj.group() : dogs
match!!
search --> matchObj.group() : dogs
以上是两种正则匹配验证的区别,当然为了方便 我们这两种方法都提供了group()的概念,下面通过一个简单的例子 来看看:
#!/usr/bin/python3
import re
line = "Cats are smarter than dogs"
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
if matchObj:
print ("matchObj.group() : ", matchObj.group())
print ("matchObj.group(1) : ", matchObj.group(1))
print ("matchObj.group(2) : ", matchObj.group(2))
else:
print ("No match!!")
import re
line = "Cats are smarter than dogs"
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
if matchObj:
print ("matchObj.group() : ", matchObj.group())
print ("matchObj.group(1) : ", matchObj.group(1))
print ("matchObj.group(2) : ", matchObj.group(2))
else:
print ("No match!!")
以上实例执行结果如下:
matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
我们这个group(),的结果是根据正则r'(.*) are (.*?) .*',来的 第一个括号里面呢就是第一组,第二个括号里面的就是第二组
整个的是一个大组所以上面的结果就是第一组匹配的就是are 前面的所有字符就是上面的运行结果