#正则表达式
1.正则表达式的特殊字符
^/$开始/结束 \w/\W匹配字母,数字,下划线/相反
\s/\S匹配空白字符/相反 \d/D匹配数字/相反
\b/\B匹配单词开始和结束的位置/相反 .匹配任意字符
[m]匹配单个字符串 [m1m2...n]匹配多个字符串
[m-n]匹配m-n区间的数字,字母 [^m]匹配除m以外的字符串
()对正则表达式进行分组
2.正则表达式中的常用限定符
*匹配0次或多次 +匹配一次或多次 ?匹配一次或零次
{m}重复m次 {m,n}重复m到n次,省略n则为m到任意次
3.限定符与?的组合
*?匹配零次或多次,且最短匹配 +?匹配一次或多次,且最短匹配
??匹配一次或零次,且最短匹配 {m,n}?重复m-m次,且最短匹配
(?#...)正则表达式的注释 (?P<name>...)给分组命名,name为名称
(?P=name)使用名为name的分组 (注:此后面两种为python中的写法)
4.re模块的常用函数
findall(pattern,string,flags=0)#根据pattern在string中匹配字符串,若匹配成功返回结果列表,否则返回空列表,flags表示规则选项(可选).
sub(pattern,repl,string,count=0)#根据指定的正则表达式,替换源字符串中的子串,repl是用于替换的字符串,string是源字符串.
split(pattern,string,maxsplit=0)#根据pattern分隔string,maxsplit表示最大的分隔数.
escape(pattern) #匹配字符串中的特殊字符,如*,+,?等.
5.re模块的规则选项
I忽略大小写 L字符集本地化,用以多语言环境
M多行匹配 S使用'.'匹配包括\n在内的所有字符
X忽略正则表达式的空白,换行 U\w\W\b\B\d\D\s\S都将使用Unicode
6.常用正则表达式:
E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$
URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$
或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$
邮政编码:^[1-9]\d{5}$
中文:^[\u0391-\uFFE5]+$
电话号码:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$
手机号码:^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$
匹配空行:\n[\s| ]*\r
提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
提取信息中的图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)
IP: re.search(r'^(([01]?\d?\d?|2[0-4]?\d?|25[0-5]?)\.){3}([01]?\d?\d?|2[0-4]?\d?|25[0-5]?)$','1.14.183.1')
提取信息中的中国手机号码:(86)*0*13\d{9}
提取信息中的中国固定电话号码:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}
提取信息中的中国电话号码(包括移动和固定电话):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}
中文、英文、数字及下划线:^[\u4e00-\u9fa5_a-zA-Z0-9]+$
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
1.正则表达式的特殊字符
^/$开始/结束 \w/\W匹配字母,数字,下划线/相反
\s/\S匹配空白字符/相反 \d/D匹配数字/相反
\b/\B匹配单词开始和结束的位置/相反 .匹配任意字符
[m]匹配单个字符串 [m1m2...n]匹配多个字符串
[m-n]匹配m-n区间的数字,字母 [^m]匹配除m以外的字符串
()对正则表达式进行分组
2.正则表达式中的常用限定符
*匹配0次或多次 +匹配一次或多次 ?匹配一次或零次
{m}重复m次 {m,n}重复m到n次,省略n则为m到任意次
3.限定符与?的组合
*?匹配零次或多次,且最短匹配 +?匹配一次或多次,且最短匹配
??匹配一次或零次,且最短匹配 {m,n}?重复m-m次,且最短匹配
(?#...)正则表达式的注释 (?P<name>...)给分组命名,name为名称
(?P=name)使用名为name的分组 (注:此后面两种为python中的写法)
4.re模块的常用函数
findall(pattern,string,flags=0)#根据pattern在string中匹配字符串,若匹配成功返回结果列表,否则返回空列表,flags表示规则选项(可选).
sub(pattern,repl,string,count=0)#根据指定的正则表达式,替换源字符串中的子串,repl是用于替换的字符串,string是源字符串.
match(pattern,string,flags=0)#从头部开始匹配字符串,只返回1次匹配成功的对象,否则返回None.
compile(patter,flags=0)#编译正则表达式,返回1个pattern对象split(pattern,string,maxsplit=0)#根据pattern分隔string,maxsplit表示最大的分隔数.
escape(pattern) #匹配字符串中的特殊字符,如*,+,?等.
5.re模块的规则选项
I忽略大小写 L字符集本地化,用以多语言环境
M多行匹配 S使用'.'匹配包括\n在内的所有字符
X忽略正则表达式的空白,换行 U\w\W\b\B\d\D\s\S都将使用Unicode
6.常用正则表达式:
E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$
URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$
或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$
邮政编码:^[1-9]\d{5}$
中文:^[\u0391-\uFFE5]+$
电话号码:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$
手机号码:^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$
匹配空行:\n[\s| ]*\r
提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
提取信息中的图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)
IP: re.search(r'^(([01]?\d?\d?|2[0-4]?\d?|25[0-5]?)\.){3}([01]?\d?\d?|2[0-4]?\d?|25[0-5]?)$','1.14.183.1')
提取信息中的中国手机号码:(86)*0*13\d{9}
提取信息中的中国固定电话号码:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}
提取信息中的中国电话号码(包括移动和固定电话):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}
中文、英文、数字及下划线:^[\u4e00-\u9fa5_a-zA-Z0-9]+$
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
代码示例:
import re
# 将正则表达式编译成pattern对象
pattern = re.compile(r'\d+')
# 一,match
# 使用 re.match 匹配文本,获得匹配结果
result = re.match(pattern,'123adb234')
print(result.group()) if result else print(result)
result2 = re.match(pattern,'adb234')
print(result2.group()) if result2 else print(result2)
# 执行结果:
'123'
None
# 二,search
result = re.search(pattern, 'abc123def')
print(result.group()) if result else print(result)
# 执行结果:
'123'
# 三,split
p = re.compile(r'[,|.|;|?]')
result = re.split(p, 'a.b?c,d.e.f;g')
print(result)
# 执行结果:
['a', 'b', 'c', 'd', 'e', 'f', 'g']
# 四,findall
result = re.findall(pattern, 'a2b4sc1dd6')
print(result)
# 执行结果:
['2', '4', '1', '6']
# 五,finditer
result = re.finditer(pattern, 'a4Bd2lh2fh23j')
print([match.group() for match in result])
# 执行结果:
['4', '2', '2', '23']
# 六, sub
result = re.sub('[.|;|,|?]','','jdh.dh;e,jh?s')
print(result)
# 执行结果:
'jdhdhejhs'
# 七, subn
s = 'i love world, hello world!'
p = re.compile(r'(\w+) (\w+)')
print(p.subn(r'\2 \1',s))
# 执行结果:
('love i world, world hello!', 2)