10-正则

什么是正则表达式?
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符串及这些特定字符的组合,组成一个‘规则字符串’,这个‘规则字符串’用来表达对字符串的一种过滤逻辑。

http://tool.oschina.net/regex/ 开源中国在线正则表达式测试


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

---------------------

re.match
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,mathc就返回none

re.match(pattern,string,flags=0)  3个参数 正则表达式、目标字符串、匹配模式

 

最常规的匹配

import re
content = 'Hello 123 4567 World_This is a Regex Demo'
print(len(content))
result = re.match('^Hello\s\d\d\d\s\d{4}\s\w{10}.*Demo$',content)
print(result)
print(result.group()) #返回匹配结果
print(result.span()) #输出匹配结果范围
打印结果
41
<_sre.SRE_Match object; span=(0, 41), match='Hello 123 4567 World_This is a Regex Demo'>
Hello 123 4567 World_This is a Regex Demo
(0, 41)

  

范匹配

import re
content = 'Hello 123 4567 World_This is a Regex Demo'
result = re.match('^Hello.*Demo$',content)  #.*可以把中间的所有字符全部匹配到
print(result)

打印结果
<_sre.SRE_Match object; span=(0, 41), match='Hello 123 4567 World_This is a Regex Demo'>

 

匹配目标

import re
content = 'Hello 1234567 World_This is a Regex Demo'

result = re.match('^Hello\s(\d+)\sWorld.*Demo$',content) #想匹配1234567 指定左右端点 用括号(\d+)扩起来

print(result)
print(result.group(1)) #输出第一个括号中的内容 
#如果想输出匹配结果,要将匹配内容提前用括号括起来
打印结果
<_sre.SRE_Match object; span=(0, 40), match='Hello 1234567 World_This is a Regex Demo'>
1234567

 

贪婪模式

import re
content = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^He.*(\d+).*Demo$',content)
print(result)
print(result.group(1)) #因为.*尽可能多匹配到的是123456 所有打印group时只会输出7
打印结果

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

  

非贪婪模式

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

 

匹配模式

import re
content = '''Hello 1234567 World_This 
is a Regex Demo
'''
result = re.match('^He.*?(\d+).*Demo$',content)   #打印结果为none,因为.*?不能匹配换行符
print(result) 
打印结果

None

#-----------------------------------
#re.S可以代替换行符
import re
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, 41), match='Hello 1234567 World_This \nis a Regex Demo'>
1234567

  

 

posted @ 2018-11-14 10:58  犀利的攻城狮  阅读(127)  评论(0编辑  收藏  举报