python re模块findall使用
今天练习re模块时候出现了一个很奇怪的问题,同样的正则表达式用re.search()与用re.compile().findall()匹配出来的结果不一致。
很是奇怪,故此记录一下,防止以后碰到类似情况解决不了。
#!/usr/bin/env python3
# Author:taoke
import re
str = '<link rel="icon" sizes="any" mask href="http://www.baidu.com/img/baidu_85beaf5496f291521eb75ba38eacbd87.svg.com">'
pat = '[a-zA-Z0-9]+://[a-zA-Z0-9]+\.[a-zA-Z0-9]+\.(com|cn)'
p = re.search(pat,str)
print(p)
p = re.compile(pat).findall(str)
print(len(p) , p)
运行结果:
D:\Code\WebCrawler\venv\Scripts\python.exe D:/Code/WebCrawler/reTest/reTest1.py
<_sre.SRE_Match object; span=(40, 60), match='http://www.baidu.com'>
1 ['com'] Process finished with exit code 0
两次结果并不一致。随后到处查资料问人,后来发现一篇博客:python re 模块 findall 函数用法简述
介绍了re.re.compile().findall()的用法。
>>> import re
>>> s = "adfad asdfasdf asdfas asdfawef asd adsfas " >>> reObj1 = re.compile('((\w+)\s+\w+)')
>>> reObj1.findall(s)
[('adfad asdfasdf', 'adfad'), ('asdfas asdfawef', 'asdfas'), ('asd adsfas', 'asd')] >>> reObj2 = re.compile('(\w+)\s+\w+')
>>> reObj2.findall(s)
['adfad', 'asdfas', 'asd'] >>> reObj3 = re.compile('\w+\s+\w+')
>>> reObj3.findall(s)
['adfad asdfasdf', 'asdfas asdfawef', 'asd adsfas']
按以上代码例子讲解:
findall函数返回的总是正则表达式在字符串中所有匹配结果的列表,此处主要讨论列表中“结果”的展现方式,即findall中返回列表中每个元素包含的信息。
@1.当给出的正则表达式中带有多个括号时,列表的元素为多个字符串组成的tuple,tuple中字符串个数与括号对数相同,字符串内容与每个括号内的正则表达式相对应,并且排放顺序是按括号出现的顺序。
@2.当给出的正则表达式中带有一个括号时,列表的元素为字符串,此字符串的内容与括号中的正则表达式相对应(不是整个正则表达式的匹配内容)。
@3.当给出的正则表达式中不带括号时,列表的元素为字符串,此字符串为整个正则表达式匹配的内容。
所以将我上面的正则表达式该后如下:
#!/usr/bin/env python3
# Author:taoke
import re
str = '<link rel="icon" sizes="any" mask href="http://www.baidu.com/img/baidu_85beaf5496f291521eb75ba38eacbd87.svg.com">'
pat = '[a-zA-Z0-9]+://[a-zA-Z0-9]+\.[a-zA-Z0-9]+\.com|cn'
p = re.search(pat,str)
print(p)
p = re.compile(pat).findall(str)
print(len(p) , p)
运行结果如下:
D:\Code\WebCrawler\venv\Scripts\python.exe D:/Code/WebCrawler/reTest/reTest1.py
<_sre.SRE_Match object; span=(40, 60), match='http://www.baidu.com'>
1 ['http://www.baidu.com'] Process finished with exit code 0
两次匹配的结果一致了,哈哈。
python re模块findall使用的更多相关文章
- python re模块findall()详解
今天写代码,在写到郑泽的时候遇到了一个坑,这个坑是re模块下的findall()函数. 下面我将结合代码,记录一下 import re string="abcdefg acbdgef abc ...
- Python re 模块findall() 函数返回值展现方式详解
findall 函数: 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表. 注意: match 和 search 是匹配一次 findall 匹配所有,mat ...
- re模块findall函数用法
title: Python subtitle: 1.re模块findall函数用法 date: 2018-12-13 10:17:28 --- Python re 模块 findall 函数用法简述 ...
- python基础-模块
一.模块介绍 ...
- python 各模块
01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支 ...
- Day5 模块及Python常用模块
模块概述 定义:模块,用一砣代码实现了某类功能的代码集合. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,提供了代码的重用性.在Python中,一个.py文件就称之为一个模块(Mod ...
- python常用模块(1):collections模块和re模块(正则表达式详解)
从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来 ...
- python——re模块
python--re模块 一 正则表达式的作用 1.给字符串进行模糊匹配, 2.对象就是字符串 二 字符匹配(普通字符.元字符) 普通字符:数字字符和英文字母和自身匹配 2.元字符:. ^ $ * + ...
- Python xml 模块
Python xml 模块 TOC 什么是xml? xml和json的区别 xml现今的应用 xml的解析方式 xml.etree.ElementTree SAX(xml.parsers.expat) ...
随机推荐
- 【Spring系列】自己手写一个 SpringMVC 框架
参考文章 一.了解SpringMVC运行流程及九大组件 1.SpringMVC的运行流程 1)用户发送请求至前端控制器DispatcherServlet 2)DispatcherServlet收到请求 ...
- Alpha第四天
Alpha第四天 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.前言 任务分配是VV.ZQ. ...
- js计时功能
//个位秒加 function time4jia() { //分钟60为上限 所有加停止 if (sz(a('time1').innerHTML) == 6) { return; } var m4 = ...
- C语言——第十四、十五周作业
题目 题目一:交换最小值和最大值 1.实验代码 #include<stdio.h> int main() { ; int i , n; int a[N]; int x , y; scanf ...
- JDBC操作数据库的三种方式比较
JDBC(java Database Connectivity)java数据库连接,是一种用于执行上sql语句的javaAPI,可以为多种关系型数据库提供统一访问接口.我们项目中经常用到的MySQL. ...
- ASP.NET Web API编程——路由
路由过程大致分为三个阶段: 1)请求URI匹配已存在路由模板 2)选择控制器 3)选择操作 1匹配已存在的路由模板 路由模板 在WebApiConfig.Register方法中定义路由,例如模板默认生 ...
- Django REST framework+Vue 打造生鲜超市(二)
三.Models设计 3.1.项目初始化 (1)进虚拟环境下安装 django2.0.2 djangorestframework和相关依赖mark,filter pillow 图片处理 pip in ...
- Formdata 图片上传 Ajax
/*图片上传*/ $("点击对象").bind("click", function(e){ $('#form-upload').remove(); $('bod ...
- maven入门(1-3)构建简单的maven项目
1. 用Maven 命令创建一个简单的Maven项目 在cmd中运行如下命令: mvn archetype:generate -DgroupId=com.mycompany.app -Dartifac ...
- ibatis的优缺点及可行性分析
1.优点 简单: 易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现. 实用: 提供了数据映射功能,提供了对底层数据访问的封装(例如ado.net),提供了DAO框架,可以使我 ...