python正则表达式-re

正则表达式是处理字符串的强大工具,能够实现字符串的检索、替换、匹配验证等

正则表达式常用匹配规则如下:

模式                          描述
\w                  匹配字符、数字以及下划线的字符
\W                  匹配不是字符、数字以及下划线的字符
\s                  匹配任意空白字符
\S                  匹配任意非空白字符
\d                  匹配任意数字
\D                  匹配任意非数字的字符
\A                  匹配字符串开头
\Z                  匹配字符串结尾,若存在换行则只匹配到换行前的结束字符串
\z                  匹配字符串结尾,若存在换行还会匹配换行符
\G                  匹配最后匹配完成的位置
\n                  匹配一个换行符
\t                  匹配一个制表符
^                   匹配一行字符串的开头
$                   匹配一行字符串的结尾
.                   匹配任意字符,除了换行符,当re.DOTALL标记指定时可以匹配包括换行符的任意字符
[...]               用来表示一组字符,,单独列出,比如[awk]匹配a、m或k
[^...]              不在[]中的字符,比如[^abc]匹配除了abc之外的字符
*                   匹配零个或多个表达式
+                   匹配一个或多个表达式
?                  匹配0个或1个前面的正则表达式定义的片段,非贪婪模式
{n}                 精确匹配n个前面的表达式
{n,m}               匹配n到m次由前面正则表达式定义的片段,非贪婪模式
a|b                 匹配a或b
()                  匹配括号内的表达式,也表示一个组

 匹配方法match():传入匹配的字符串以及正则表达式,从字符串起始开始匹配,一旦开头不匹配,则匹配失败,若匹配成功则返回结果,否则返回None

import re

content = 'Hello 123 4567 World_This is a Regex Demo'
result = re.match('^Hello\s\d\d\d\s\d{4}\s\w{10}',content)
print(result)
#输出匹配到的内容
print(result.group())
#输出匹配范围
print(result.span())

结果:
<_sre.SRE_Match object; span=(0, 25), match='Hello 123 4567 World_This'>
Hello 123 4567 World_This
(0, 25)
View Code

匹配目标:即从字符串提取一部分内容,则可以使用()将想提取的子字符串括起来,调用group()方法传入分组索引即可

import re

content = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^Hello\s(\d+)\sWorld',content)
print(result)
print(result.group())
#提取匹配的数字
print(result.group(1))

结果:
<_sre.SRE_Match object; span=(0, 19), match='Hello 1234567 World'>
Hello 1234567 World
1234567
(0, 19)
View Code

贪婪模式:.*尽可能多的匹配多的字符

import re

content = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^He.*(\d+).*Demo$',content)
print(result)
print(result.group(1))
结果:
<_sre.SRE_Match object; span=(0, 40), match='Hello 1234567 World_This is a Regex Demo'>
7
View Code

非贪婪模式:.*?尽可能匹配少的字符

import re

content = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^He.*?(\d+).*Demo$',content)
print(result)
print(result.group(1))

结果;
<_sre.SRE_Match object; span=(0, 40), match='Hello 1234567 World_This is a Regex Demo'>
1234567
View Code

修饰符 re.S: .*不能够匹配换行符,所以当遇到换行符时会导致匹配失败,而re.S就可以修正这个错误

content = '''Hello 1234567 World_This
is a Regex Demo
'''
result = re.match('^He.*?(\d+).*?Demo$',content,re.S)
print(result)
print(result.group(1))

结果:
<_sre.SRE_Match object; span=(0, 40), match='Hello 1234567 World_This\nis a Regex Demo'>
1234567
View Code

转义匹配:当遇到用于正则匹配模式的特殊字符时,则应该在其前面加\(反斜线)进行转义

import re

content = '(百度)www.baidu.com'
result = re.match('\(百度\)www\.baidu\.com',content)
print(result)
print(result.group())

结果:
<_sre.SRE_Match object; span=(0, 17), match='(百度)www.baidu.com'>
(百度)www.baidu.com
View Code

seasrch()方法:在匹配时会扫描整个字符串,返回第一个匹配成功的结果,即正则表达式可以是字符串的一部分,在进行匹配的过程中search()方法会一次扫描整个字符串,直至找到第一个符合规则的字符串然后返回匹配内容(第一个内容,以后不再进行匹配),若搜索整个字符串未找到则返回None.

import re

content = 'Extra stings Hello 1234567 World_This  ia a Regex Demo Extra stings'
result = re.search('Hello.*?(\d+).*?Demo',content)
print(result)

结果:
<_sre.SRE_Match object; span=(13, 54), match='Hello 1234567 World_This  ia a Regex Demo'>
View Code

Findall()方法:获取匹配正则表达式的所有内容,搜索整个字符串,放回匹配正则表达式的所有内容

import re

content = 'Extra stings Hello 1234567 World_This  ia 456789 Regex Demo Extra stings'
result = re.findall('.*?(\d+).*?',content)
print(result)
结果:
['1234567', '456789']
View Code

sub()方法:进行文本的修改,例如将一段文本中的数字全部去掉

import re

content = 'jfie4165efj5fkeo4fieo04fje9'
result = re.sub('\d+','',content)
print(result)

结果:
jfieefjfkeofieofje
View Code

Compile():这个方法可以将正则字符串编译成正则表达式对象,方便在后面的匹配中再次利用

import re

content = '2016-12-15 12:00'
pattern = re.compile('\d{2}:\d{2}')
result = re.sub(pattern,'',content)
print(result)

结果:
2016-12-15 
View Code

 

 

 

 

 

 

posted @ 2018-12-24 19:32  Coolc  阅读(144)  评论(0编辑  收藏  举报