一,什么是正则表达式

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

二,python中的正则表达式

1.导入相关库
re 模块使 Python 语言拥有全部的正则表达式功能。

 #1.导入相关包
import re

2.相关匹配语法

#  \w:匹配任意的一个字母数字或者下划线     \W:匹配任意一个不是字母数字或者下划线的字符     相反
# \d:匹配任意一个十进制数 \D:匹配除了十进制数以外的任意一个字符 互补
# \s:匹配任意一个空白字符 \S:匹配任意一个不是空白的字符 互补

#元字符---就是正则表达式中具有一些特殊含义的字符
'''
比如:
.:匹配除了换行符以外的任意一个字符
^: 匹配字符串的开始的位置
$: 匹配字符串结束的位置
*:匹配重复出现零次或一次或多次的字符
?: 匹配重复出现零次或一次的字符
+: 匹配重复出现一次或多次的字符
{}:代表{n}前面字符刚好重复出现n次,比如k{5}:代表前面的k刚好出现5次
{n,}前面的字符至少重复出现n次,比如k{5}:代表前面的k至少出现5次
{m,n} 匹配前面的正则表达式至少m次,最多n次
| :选择符
(): 捕获()中正则表达式的内容以备进一步利用处理,可以通过在左括号后面跟随?:来关闭这个括号的捕获功能
前瞻: exp1(?=exp2) exp1后面的内容要匹配exp2
      负前瞻: exp1(?!exp2) exp1后面的内容不能匹配exp2
      后顾: (?<=exp2)exp1 exp1前面的内容要匹配exp2
      负后顾: (?<!exp2)exp1 exp1前面的内容不能匹配exp2
'''
'''
模式修正符
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

'''
pat7="python"
pat8="python"
string5="dawdadPythonadawda"
print(re.search(pat7,string5))
print(re.search(pat8,string5,re.I))

'''
贪婪模式:尽可能多的匹配
懒惰模式:尽可能少的匹配
'''
pat7="p.*y" #贪婪模式
pat8="p.*?y" #懒惰模式
string5="dawdadpythonadawdapy"
print(re.search(pat7,string5))
print(re.search(pat8,string5))

'''
匹配函数

re.search() 顺序不做要求 扫描整个字符串并返回第一个成功的匹配。
re.match() 从头部开始搜索 re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

re.match与re.search的区别:
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;
re.search匹配整个字符串,直到找到一个匹配。

re.sub() 全局匹配函数
re.compile(正则表达式).findall(匹配字符串) 全部匹配结果
'''
pat1="www"
pat2="com"
string="www.baidu.com"
print(re.match(pat1,string))
print(re.match(pat2,string))

phone = "2004-959-559 # 这是一个国外电话号码"

# 删除字符串中的 Python注释
num = re.sub(r'#.*$', "", phone)
print("电话号码是 : ", num)

# 删除非数字(-)的字符串
num = re.sub(r'\D', "", phone)
print("电话号码是 : ", num)