正则表达式
来源:互联网 发布:微信h5制作软件 编辑:程序博客网 时间:2024/06/06 01:37
Python的正则表达式
- Python的正则表达式
- RE模块
- 贪婪模式
- 正则表达式
- Python的正则表达式
RE模块
普通匹配
s = 'ABC\\-001' # Python的字符串,由于\是特殊字符所以必须转义s = r'ABC\-001' # Python的字符串,加上r表示不用转义test = '用户输入的字符串'if re.match(r'正则表达式', test): print('ok')else: print('failed')
切分字符串
re.split(r'[\s\,]+', 'a,b, c d')#['a', 'b', 'c', 'd']
分组
可用于提取字符串子串
>>> m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')>>> m<_sre.SRE_Match object; span=(0, 9), match='010-12345'>#第一个代表匹配的字符串(默认输入0)>>> m.group(0)'010-12345'>>> m.group(1)'010'>>> m.group(2)'12345'
通过search进行搜索
通过search进行搜索的时候只要匹配到第一个符合的字串就会停止搜索
import rer = re.search(r"1[345678]\d{9}",'17312662156dsad15215654845')r.group()#输出17312662156#这里的group第一个代表找到的第一个匹配的字符串,没有第二个
通过findall找到所有匹配的字串(找到一个字符串中所有的数字)
import restr = """fhakh213hkhj3h1k2j3hh21jk3lh12jk3h124hlkjh21312kj3h1l23jkh"""numbers = re.findall(r'\d+', str)print(numbers)#['213', '3', '1', '2', '3', '21', '3', '12', '3', '124', '21312', '3', '1', '23']
通过sub进行字符串替换(将所有的数字替换为250)
import restr = """fhakh213hkhj3h1k2j3hh21jk3lh12jk3h124hlkjh21312kj3h1l23jkh"""#替换的字符串作为第二个参数,被替换的作为第三个参数numbers = re.sub(r'\d+','250', str)print(numbers)##完成去除网页中的标签import redef add(result): num = result.group() num = int(num)+50 return str(num)text = """<font color=red><strong>赠书 | AI专栏(AI圣经!《深度学习》中文版)</strong></font></a>年和罚款积分<a href="http://blog.csdn.net/broadview2006/article/details/76145481"><font color=blue><strong>评论送书 | 机器学习、Java虚拟机、微信开发</strong></font></a>"""numbers = re.sub(r'<[^<>]+>|</\w+>', "", text)print(numbers)
通过自定义函数完成特殊的替换(让每个数字等于原数+50)
import redef add(result): num = result.group() num = int(num)+50 return str(num)text = """fhakh213hkhj3h1k2j3hh21jk3lh12jk3h124hlkjh21312kj3h1l23jkh"""#第二个参数为一个自定义函数numbers = re.sub(r'\d+', add, text)print(numbers)
通过split进行字符串分割
import re#由于.在正则表达式中代表特殊字符,所以可以通过\转义为普通的.result = re.split(r",|:|\.", """heel,feel:use.you:cll""")print(result)
贪婪模式
神马是贪婪模式
Python⾥数量词默认是贪婪的(在少数语⾔⾥也可能是默认⾮贪婪),总是
尝试匹配尽可能多的字符;
⾮贪婪则相反,总是尝试匹配尽可能少的字符。
在”*”,”?”,”+”,”{m,n}”后⾯加上?,使贪婪变成⾮贪婪。举个例子:找出网页中的图片连接:
import retext = r'''<img?data-original="https://rpic.douyucdn.cn/appCovers/2016/11/13/1213973_201611131917_small.jpg"?src="https://rpic.douyucdn.cn/appCovers/2016/11/13/1213973_201611131917_small.jpg"?style="display:?inline;">'''img = re.findall(r"https:.+?\.jpg", text)print(img)
正则表达式
- 匹配分组
举个栗子:(匹配html的标签)
import re #\2代表匹配第二个分组中的内容,\1代表匹配第一个分组中的内容 re.match(r"<(.+)><(.+)></\2></\1>",'<html><div></div></html>') #通过起别名的方式同样可以匹配 re.match(r"<(?P<key1>.+)><(?P<key2>.+)></(?P=key2)></(?P=key1)>",'<html><div></div></html>')
阅读全文
0 0
- 【正则表达式】正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- Spring AOP 实现原理
- 【代码笔记】iOS-手机版本号,机型,操作系统版本,设备唯一标识符
- 2017.8.22
- 数据库切分(4)之全局主键生成策略
- Unity时间管理类,用来做一些方法的延迟调用
- 正则表达式
- Servlet.init() for servlet despatcherServlet threw exception,AopProxyUtils.getSingletonTarget(Ljava/
- HDU 1238 Substrings(暴力+stl)
- 打开我的csdn程序
- QUEUE
- 《C++ Primer》第五版课后习题解答_第二章(2)(09-20)
- tensorflow的优化器比较
- MySQL ALTER TABLE: ALTER vs CHANGE vs MODIFY COLUMN
- 高内聚,低耦合概念