正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配
正则表达式是对字符串操作的一种逻辑公式,用事先定义好的一些特殊字符,以及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑
re.match():尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回None
import re
str = "张三李四王五赵六李四"
# match():只从开头匹配,不成功直接返回None
result = re.match("李四",str)
print(result) #None
re.search():扫描整个字符串并返回第一个成功的匹配
import re
str = "张三李四王五赵六李四"
# search():匹配的是整个字符串
result = re.search("李四",str)
print(result) #
# span():返回匹配字符串所在位置
print(result.span()) #(2, 4)
# group():返回匹配内容
print(result.group()) #李四
# groups():返回一个包含所有小组字符串的元组,从1到所含的小组号
print(result.groups()) #()
re.findall():返回所有成功的匹配字符串
import re
str = "张三李四王五赵六李四"
# findall():返回所有匹配的字符串
result = re.findall("李四",str)
print(result) #['李四', '李四']
re.sub(pattern, repl, string, count=0, flags=0):
import re
phone = "2004-959-559 # 这是一个国外电话号码"
# 删除字符串中的 Python注释
num = re.sub(r'#.*$', "", phone)
print("电话号码是: ", num)
# 删除非数字(-)的字符串
num = re.sub(r'\D', "", phone)
print("电话号码是 : ", num)
re.split(pattern, string[, maxsplit=0, flags=0]):
>>>import re
>>> re.split('\W+', 'runoob, runoob, runoob.')
['runoob', 'runoob', 'runoob', '']
>>> re.split('(\W+)', ' runoob, runoob, runoob.')
['', ' ', 'runoob', ', ', 'runoob', ', ', 'runoob', '.', '']
>>> re.split('\W+', ' runoob, runoob, runoob.', 1)
['', 'runoob, runoob, runoob.']
[ ]:
import re
s = "afo3oir45oij890aouih"
result1 = re.findall("[1234][3456]",s)
result2 = re.findall("[a-z][0-3][a-z]",s)
result3 = re.findall("[^a-z][0-9][^a-z]",s)
print(result1) #['45']
print(result2) #['o3o']
print(result3) #['890']
|:
():
import re
email = "[email protected]"
result = re.match(r"\w{5,20}@(163|126|qq)\.(com|cn)",email)
print(result) #
*、+、?:
import re
s = "afo3oir45oij890aouih"
result2 = re.findall("[a-z][0-9]*[a-z]",s)
print(result2) #['af', 'o3o', 'ir', 'oi', 'j890a', 'ou', 'ih']
result2 = re.findall("[a-z][0-9]+[a-z]",s)
print(result2) #['o3o', 'r45o', 'j890a']
result2 = re.findall("[a-z][0-9]?[a-z]",s)
print(result2) #['af', 'o3o', 'ir', 'oi', 'ao', 'ui']
{m}、{m,}、{m,n}:
import re
# 验证是否为qq号码
s = "1123971638"
result = re.findall("[1-9][0-9]{5,11}",s)
print(result) #['1123971638']
result = re.findall("[1-9][0-9]{5}",s)
print(result) #['112397']
result = re.findall("[1-9][0-9]{5,}",s)
print(result) #['1123971638']
.、^、$:
import re
# 验证是否为qq号码
s = "1123971628386045673"
result = re.findall("[1-9][0-9]{4,10}",s)
print(result) #['1123971638']
result = re.findall("^[1-9][0-9]{4,10}$",s)
print(result) #[]
s = "1123971628"
result = re.findall("^[1-9][0-9]{4,10}$",s)
print(result) #['1123971628']
Python里数量词默认是贪婪的(在少数语言中也可能是默认非贪婪),总是尝试匹配尽可能多的字符
非贪婪则相反,总是尝试匹配尽可能少的字符
在"*"、"?"、"+"、"{m,n}“后面加上”?",使贪婪变成非贪婪