元字符总结:

正则表达式常用的元字符有^,$, . , \b ,\w, \W, \s , \S, \d, \D,各自的功能如下

^:匹配行的开始位置

$ : 匹配行的结束位置

\b : 匹配单词的开始或者结束位置

. : 匹配除换行符之外的任意字符

\w :匹配单词字符(包括字母,数字,下划线和汉字)

\W : 匹配任意非单词字符(包括字母,数字,下划线和汉字)

\s : 匹配任意的空白字符,如空格,制表符,换行符

\S : 匹配任意的非空白字符

\d : 匹配任意的数字

\D : 匹配任意的非数字

| :或者的意思

():在这里里面选择

(?:\w+\.)*  以句点作为结尾的字符串,例如“google.”、“twitter.”、“facebook.”,但是这些匹配不会保存下来 供后续的使用和数据检索

(?#comment)     此处并不做匹配,只是作为注释

(?=.com)   如果一个字符串后面跟着“.com”才做匹配操作,并不使用任何目标字符串

(?!.net)     如果一个字符串后面不是跟着“.net”才做匹配操作

(?<=800-)  如果字符串之前为“800-”才做匹配,假定为电话号码,同样,并不使用任何输入字符串

(?<!192\.168\.)如果一个字符串之前不是“192.168.”才做匹配操作,假定过滤掉一组C类IP地址

(?(1)y|x)  如果一个匹配组 1(\1)存在,就与 y 匹配;否则,就与 x 匹配

注意:(?=XXX)表示结尾要是什么才匹配(?!xxx)表示结尾不是什么才匹配

(?<=XXX)表示需要匹配的字符串之前需要是XXX

(?<!XXX)表示需要匹配的字符串之前不能为XXX才匹配

匹配邮箱:

import re
while True:
     var = input("输入你的邮箱地址:")
     result = re.match(r"^[0-9a-zA-Z_]{4,20}@(163|126|q{2}|outlook)\.com$",var)# |表示选择,()表示限定
     print(result)
     if result:
         list =  result.group()
         print(list,"是正常的邮箱地址")
     else:
         print(var, "不是正常的邮箱地址")

 

group函数表示取()中的内容那一部分。是分组函数

import re
while True:
     var = input("输入你的邮箱地址:")
     result = re.match(r"^([0-9a-zA-Z_]{4,20})@(163|126|q{2}|outlook)\.com$",var)
     print(result)
     if result:
         list1 = result.group(1)
        list =  result.group()
         list2 = result.group(2)
         print(list,"是正常的邮箱地址")
         print("第一部分内容是:",list1)
         print("第二部分内容是:",list2)
     else:
         print(var, "不是正常的邮箱地址")

输入你的邮箱地址:261781wyw_@163.com

<re.Match object; span=(0, 18), match='261781wyw_@163.com'>
261781wyw_@163.com 是正常的邮箱地址

第一部分内容是: 261781wyw_

第二部分内容是: 163

 

注意:正则表达式中如果需要前后对应可以使用group函数要配对的用括号括起来后面用\1配对即可

import re
 html_str ="<h1>hahxieu</h1>"
result = re.match(r"<(\w*)>.*</\1>",html_str)
 list = result.group()
print(list)

限定符:

{n} 重复n次

{n,} 重复至少n次

{n,m} 重复n到m次

*重复至少0次

+ 至少重复一次

?重复0次或者1次

*?尽可能少得使用重复的第一个匹配

+? 尽可能少的使用重复但至少使用一次

?? 使用零次重复或者一次重复

{N}? 等同于{n}

{n,} ? 尽可能少地使用重复,但至少使用n次

{n,m}?介于n 次和m次之间,尽可能少的使用重复

 

 

Python中 re模块的高级用法:

 

Search:匹配出文章的阅读次数

import re

ret = re.search(r"\d+","阅读次数 9999")

print(ret.group())
9999

findall 统计出pythoncc++相应文章阅读的次数

ret1 = re.findall(r"\d+","python = 9999,c=9282, c++= 9282")
print(ret1)

['9999', '9282', '9282']

 

 sub将返回的数据进行替换

re2 = re.sub(r"\d+","872","python =221, c= 2929")
print(re2)python =872, c= 872

split 根据匹配进行切割字符串,并返回一个列表

re3 = re.split(r":| ","information:I will come to you")
print(re3)['information', 'I', 'will', 'come', 'to', 'you']

常用字符转义:

\a 响铃

\b 在正则表达式中表示单词的边界

\t 制表符\u0009

\r 回车符\u000D

\v 垂直制表符

\f 换页符

\n 换行符

\e 回退(ESC)

\040 将ASCII 字符匹配为八进制数

\x20 使用16进制表示,形式与ASCII字符匹配

\cC ASCII控制字符