码迷,mamicode.com
首页 > 编程语言 > 详细

Python 正则表达式

时间:2019-10-31 21:45:32      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:表示   sub   全局   第一个   正则   int   nihao   下划线   com   

一些常用的内容,均以例子代码形式给出,估计能更好更快理解(内容不全,边学边补吧)

一、原子

import re

# 普通字符作为原子
string = "taoyunjiaoju"
pat = "yun"
rst = re.search(pat, string)
print(rst)  # <re.Match object; span=(3, 6), match=‘yun‘>


# 非打印字符作为原子
# \n 换行符  \t 制表符
string = ‘‘‘taoyunjiaoju
nihao‘‘‘   # ‘‘‘ ‘‘‘可以用来匹配非打印字符
pat = \n
rst = re.search(pat, string)
print(rst)  # <re.Match object; span=(12, 13), match=‘\n‘>

# 通用字符作为原子 ‘‘‘ \w 字母,数字,下划线 \W 除字母、数字、下划线 \d 十进制数字 \D 除十进制数字 \s 空白字符 \S 除空白字符 ‘‘‘ string = ‘‘‘taoyunji8 736789aoyu‘‘‘ pat = \w\d\s\d\d rst = re.search(pat, string) print(rst) # <re.Match object; span=(7, 12), match=‘i8 73‘>
# 原子表 string = ‘‘‘taoyunji8736789aoyu‘‘‘ pat = tao[yab]un rst = re.search(pat, string) print(rst) # <re.Match object; span=(0, 6), match=‘taoyun‘> # []匹配原子表中出现的任意一个字符,刚好[yab]中含有y,因此匹配到了taoyun,若是pat为[abc],此时则匹配不到 pat = tao[^yab] rst = re.search(pat, string) print(rst) # None # 原子表[]中加一个 ^ 表示不匹配原子表中出现的字符,因为本例中[^yab]而string中tao后面刚好是y,所以匹配不到

二、元字符

# 元字符
‘‘‘
. 除换行符外的任意一个字符
^ 开始位置
$ 结束位置
* 0\1\多次
+ 1\多次
{n} 恰好n次
{n,}至少n次
{n, m} 至少n次,之多m次
| 模式选择符
()模式单元
‘‘‘
import re
string
= ‘‘‘taoyunji5289894379aoyu‘‘‘ pat = tao... rst = re.search(pat, string) print(rst) # <re.Match object; span=(0, 6), match=‘taoyun‘>
pat = ^taoyun pat1 = ^yunji rst = re.search(pat, string) rst1 = re.search(pat1, string) print(rst) # <re.Match object; span=(0, 6), match=‘taoyun‘> print(rst1) # None 因为^ 是从开始位置匹配,而y不是string的开头位置
pat = yu$ rst = re.search(pat, string) print(rst) # <re.Match object; span=(20, 22), match=‘yu‘>
pat = tao.* rst = re.search(pat, string) print(rst) # <re.Match object; span=(0, 22), match=‘taoyunji5289894379aoyu‘> string = ‘‘‘taoyunnnnnnji5289894379aoyu‘‘‘ pat = yun{2,8} # 匹配n至少2次,之多8次。 而string里yun后面刚好还有大于2小于8个连续的n rst = re.search(pat, string) print(rst) # <re.Match object; span=(3, 11), match=‘yunnnnnn‘>

 

三、模式修正符

# 模式修正符
‘‘‘
I 匹配是忽略大小写
M 多行匹配
L 本地化识别匹配
U 根据Unicode字符集解析字符
S 让.匹配包括换行符
‘‘‘
import re
string
= "Python" pat = pyt rst = re.search(pat, string, re.I) # 忽略大小写,Pyt与pyt就可以匹配了 print(rst)

四、贪婪模式和懒惰模式

import re

string = poytnythony
pat = p.*y
pat1 = p.*?y  # 以懒惰模式匹配
rst = re.search(pat, string)  # 默认是贪婪模式
print(rst)  # <re.Match object; span=(0, 11), match=‘poytnythony‘>   贪婪模式
rst1 = re.search(pat1, string)
print(rst1)  # <re.Match object; span=(0, 3), match=‘poy‘>  懒惰模式

五、正则表达式函数

# 正则表达式函数
import re
# 1、match
string = poythonyhjskjsa
pat = p.*?y  # 懒惰模式
rst = re.match(pat, string, re.I)  # match从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none
print(rst)  # <re.Match object; span=(0, 3), match=‘poy‘>

# 2、search  上面几个例子用的都是search()函数,re.search 扫描整个字符串并返回第一个成功的匹配。

# 3、compile()全局匹配函数,用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
string = poythopnyhjskptyjsa
pat = p.*?y  # 懒惰模式
# 全局匹配格式re.comlipe(正则表达式).findall(数据)
rst = re.compile(pat).findall(string)
print(rst)  # [‘poy‘, ‘pny‘, ‘pty‘]
# 4、sub用于替换字符串中的匹配项。
import re
 
phone = "2004-959-559 # 这是一个国外电话号码"
 
# 删除字符串中的 Python注释 
num = re.sub(r#.*$, "", phone)
print "电话号码是: ", num
 
# 删除非数字(-)的字符串 
num = re.sub(r\D, "", phone)
print "电话号码是 : ", num

 

六、匹配网址和匹配电话号码例子

# 匹配.com或.cn网址
import re

string = "<a href=‘http://www.baidu.com‘>百度首页</a>"
pat = [a-zA-Z]+://[^\s]*[.com|.cn]
rst = re.compile(pat).findall(string)
print(rst)  # [‘http://www.baidu.com‘]

# 匹配电话号码
string = "fkjdsnfknk021-759815413795893fjkldsnaklg0935-583498593fmkds"
pat = \d{4}-\d{7}|\d{3}-\d{8}
rst = re.compile(pat).findall(string)
print(rst)  # [‘021-75981541‘, ‘0935-5834985‘]

 

Python 正则表达式

标签:表示   sub   全局   第一个   正则   int   nihao   下划线   com   

原文地址:https://www.cnblogs.com/dong973711/p/11773502.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!