正则表达式就是描述字符串排列的一套规则。(re模块)
python中的正则表达式链接
https://www.cnblogs.com/tina-python/p/5508402.html
基础知识
1、原子
原子是正则表达式最基本的组成单位,每个正则表达式中至少包含一个原子。
原子的种类:普通字符、非打印字符(如换行符)、通用字符、原子表
(1)普通字符作为原子
import re
pattern="yue"
string="http://yum.qianyue.com"
result1=re.search(pattern, string)
print(result1)
(2)非打印字符
略略略
(3)通用字符作为原子
符号 含义
\w 匹配任意一个字母、数字和下划线
\W 匹配除任意一个字母、数字和下划线以外的任意一个字符
\d 匹配任意一个十进制数
\D 匹配除十进制数以外的任意一个其他字符
\s 匹配任意一个空白字符
\S 匹配除空白字符以外的任意一个其他字符
(4)原子表
在python中,原子表由[]表示,比如[xyz]就是一个原子表,这个原子表定义了三个原子,这3个原子地位平等。如[xyz]py对应的源字符串是“xpython”,代表的是除了中括号的原子均可以匹配。如[^xyz]py就可以匹配apython但是不可以匹配xpython
2、元字符
(1)任意匹配元字符
import re
import string
pattern=".python..."
string="abcdfphp345pythony_py"
result=re.search(pattern, string)
print(result)
(2)边界限制元字符
(3)限定符
import re
import string
pattern1="py.*n"
pattern2="cd{2}"
pattern3="cd{2,}"
pattern4="cd{3}"
string="abcdddfphp345pythony_py"
result1=re.search(pattern1, string)
result2=re.search(pattern2, string)
result3=re.search(pattern3, string)
result4=re.search(pattern4, string)
print(result1)
print(result2)
print(result3)
print(result4)
(4)模式选择符
模式选择符“|”使用模式选择符,可以设置模式选择符,可以设置多个模式,匹配时,可以选择任意一个模式匹配。
import re
import string
pattern1="python|php"
string="abcdddfphp345pythony_py"
result1=re.search(pattern1, string)
print(result1)
正则表达式成功从源字符串中匹配到了结果“php”
(5)模式单元符
可以使用()将一些原子组合成一个大原子使用,小括号括起来的部分会被当一个整体使用。
3、模式修正
import re
import string
pattern1="python"
pattern2="python"
string="abcdddfphp34Pythony_py"
result1=re.search(pattern1, string)
result2=re.search(pattern2, string, re.I)
print(result1)
print(result2)
一个关于模式修正的小例子,result2可以识别到Python
4、贪婪模式与懒惰模式
贪婪模式的核心就是尽可能多的匹配,懒惰模式的核心点就是尽可能少的匹配Orz
.*
.*?
import re
import string
pattern1="p.*y"#贪婪模式
pattern2="p.*?y"#懒惰模式
string="abcdddfphp34Pythony_py"
result1=re.search(pattern1, string)
result2=re.search(pattern2, string)
print(result1)
print(result2)
5、正则表达式常见函数
常见的正则表达式函数有re.match()、re.search()、全局匹配函数、re.sub()函数
re.match(pattern,string,flag):如果想要从源字符串的起始位置匹配模式可以使用
import re
string="apythonhellomypythonhispythonourpythonend"
pattern=".pyhton."
result=re.match(pattern, string)
#result=re.match(pattern, string).span()
print(result)
print(result2)
re.search():与re.match()类似,使用该函数进行匹配,会扫描整个字符串并进行匹配,该函数与match最大的不同是re.match()函数是从原字符串的开头进行匹配,而re.search()函数会在全文在进行检索并匹配
import re
string="hellomypythonhispythonourpythonend"
pattern=".python."
result=re.match(pattern, string)
result2=re.search(pattern, string)
print(result)
print(result2)
相应结果。
None
<re.Match object; span=(6, 14), match=‘ypythonh’>
全局匹配函数:在全局匹配可以一次性匹配多个符合模式
先对模式进行预编译,然后在相应的字符串里使用findall()函数进行查找,输出
import re
string="hellomypythonhispythonourpythonend"
pattern=re.compile(".python.")#预编译
result=pattern.findall(string)#找到符合模式的所有结果
print(result)
re.sub()函数:替换函数
import re
string="hellomypythonhispythonourpythonend"
pattern="python"
result1=re.sub(pattern, "php", string)#替换所有
result2=re.sub(pattern, "php", string,2)#最多替换两次
print(result1)
print(result2)
常见实例,pdf75页
匹配url网址、电话号码、电子邮件地址