re模块 findall()详解
1. findall() 函数的2种表示形式
import re
kk = re.compile(r'\d+')
kk.findall('one1two2three3four4')
#[1,2,3,4] #注意此处findall()的用法,可传两个参数;
kk = re.compile(r'\d+')
re.findall(kk,"one123")
#[1,2,3]
2. 正则表达式可能遇到的坑 --- 正则表达式中的括号()
1. 当正则表达式中 没有括号时,就是正常匹配,如本例中"/w+/s+/w+"
在本例中"/w+/s+/w+"第一次匹配到的字符为"2345 3456",由于是贪婪模式会 继续匹配,第二次从"4567"开始匹配匹配到的结果为字符串"4567 5678"
import re
string="2345 3456 4567 5678"
regex=re.compile("\w+\s+\w+")
print(regex.findall(string))
#['2345 3456', '4567 5678']
#补充:
#\s -- 匹配任何不可见字符,包括空格、制表符、换页符等等
#\S -- 匹配任何可见字符 通常[/s/S] -- 可匹配任意字符
#[\s\S]*? -- 匹配懒惰模式的任意字符
2. 当正则表达式中有 一个括号时,如"(\w+)\s+\w+"其输出的内容就是括号匹配到的内容
原理:正则表达式中有一个括号时,其输出的内容就是括号匹配到的内容,而不是整个表达式所匹配到的结果,但是整个正则表达式执行了,只不过只输出括号匹配到的内容,
匹配过程:
1. 第一次匹配时跟上述没有括号时一样,匹配到 "2345 3456" ,只不过只输出(/w+)匹配 到的结果 即"2345",
2. 第二次匹配同理从"4567" 开始,匹配到"4567 5678",但是,只输出"4567"
import re
string="2345 3456 4567 5678"
regex1=re.compile("(\w+)\s+\w+")
print(regex1.findall(string))
#['2345', '4567']
3. 当正则表达式中有两个括号时,如 "((\w+)\s+\w+)",其输出结果是一个list 中包含2个 tuple
从输出的结果可以看出,有两个元组,每一个元组中有 两个字符串 :
其中,第一个元组种的第一个字符串"2345 3456"是最外面的括号输出的结果,第二个字符串是里面括号(/w+)输出的结果 "2345",
第二个元组是 第二次匹配的结果 -- 详解同第一次匹配。
import re
string="2345 3456 4567 5678"
regex2=re.compile("((\w+)\s+\w+)")
print(regex2.findall(string))
#[('2345 3456', '2345'), ('4567 5678', '4567')]
3. findall() 使用总结:
第一个 regex 中不带有括号,其输出的内容就是整个表达式所匹配到的内容。
第二个 regex 中带有1个括号,其输出的内容就是括号匹配到的内容,而不是整个表达式所匹配到的结果。
第三个 regex 中是带有2个括号的,我们可以看到其输出是一个list 中包含2个 tuple,--- 多个括号就会返回 多个括号分别匹配到的结果
正则表达式的特点:
1. 有括号时只能匹配到括号中的内容,没有括号就正常匹配。
2. 在正则里面 “()” 代表的是分组的意思,一个括号代表一个分组,你只能匹配到"()"中的内容
re模块 findall()详解的更多相关文章
- python re模块findall()详解
今天写代码,在写到郑泽的时候遇到了一个坑,这个坑是re模块下的findall()函数. 下面我将结合代码,记录一下 import re string="abcdefg acbdgef abc ...
- opencart 模块开发详解
opencart 模块开发详解 由 xiekanxiyang » 2013年 7月 11日 10:17 pm opencart 将页面分成若干模块, 每个模块可以有多个实例(可能这样说不是很恰当) 每 ...
- AngularJS模块的详解
AngularJS模块的详解 在讲angularjs的模块之前,我们先介绍一下angular的一些知识点: AngularJS是纯客户端技术,完全用Javascript编写的.它使用的是网页开发的常规 ...
- [转帖]Nginx rewrite模块深入浅出详解
Nginx rewrite模块深入浅出详解 https://www.cnblogs.com/beyang/p/7832460.html rewrite模块(ngx_http_rewrite_modul ...
- STM32开发 -- 4G模块开发详解(转)
STM32开发 -- 4G模块开发详解(1) STM32开发 -- 4G模块开发详解(2) STM32开发 -- 4G模块开发详解(3) STM32开发 -- 4G模块开发详解(4)
- python之模块datetime详解
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之模块datetime详解 import datetime #data=datetime.dat ...
- Spring Boot的每个模块包详解
Spring Boot的每个模块包详解,具体如下: 1.spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2.spring-boot-s ...
- Python 双向队列Deque、单向队列Queue 模块使用详解
Python 双向队列Deque 模块使用详解 创建双向队列Deque序列 双向队列Deque提供了类似list的操作方法: #!/usr/bin/python3 import collections ...
- Ansible_常用文件模块使用详解
一.Ansibel常用文件模块使用详解 1.file模块 1️⃣:file模块常用的参数列表: path 被管理文件的路径 state状态常用参数: absent 删除 ...
随机推荐
- Snipaste - 可以提高你工作效率的截图软件
使用Snipaste提高您的工作效率 Snipaste是一个简单但功能强大的剪切工具,还允许您将屏幕截图固定在屏幕上.下载并启动应用程序,按F1开始剪切,然后按F3将其粘贴为浮动窗口.而已! 您还可以 ...
- JS中常见的几种继承方法
1.原型链继承 // 1.原型链继承 /* 缺点:所有属性被共享,而且不能传递参数 */ function Person(name,age){ this.name = name this.age = ...
- python3 三行代码基于HTTP2完美实现APNS推送【详解】
第一次做苹果APNS(Apple Push Notification service)推送,关于APNS推送原理以及证书的获取方式网上已经有许多资料,在此不做过多赘述,需要注意的是证书分为测试证书和正 ...
- spring boot学习笔记(1)
一.构建springboot项目 可以通过idea的springboot initialization来创建, idea的功能很强大,可以自己选择需要集成的插件. 完整的项目结构是这样的: DemoA ...
- Could not find iPhone 6 simulator
最近原来的老项目有点问题需要处理一下,运行启动命令,就报了如下错误,提示找不到iPhone 6 模拟器. react-native run-ios Owaiss-Mac:pdm owaisahmed$ ...
- WiFi模块Demo(新手教程)图文详解模块使用教程
本文出自APICloud官方论坛,感谢论坛版主 Mr.ZhouHeng 的分享. 第一步我们需要在开发控制台创建一个Native App应用以及添模块的准备工作: 按照下图步骤 输入完点创建完成之后 ...
- vue+bootstrap4+mybatis分页
先看效果 Springboot+Mybatis+Pagehelper分页具体实现略. Controller返回数据 @GetMapping("/findByPage") publi ...
- Java 1.7.0_06中String类内部实现的一些变化【转】
原文链接: java-performance 翻译: ImportNew.com- 夏千林译文链接: http://www.importnew.com/7656.html ChangeLog: 201 ...
- Java多线程的创建(二)
前言: 虽然java的API中说创建多线程的方式只有两种(There are two ways to create a new thread of execution),分别是继承Thread类创建和 ...
- kuangbin专题专题十一 网络流 Dining POJ - 3281
题目链接:https://vjudge.net/problem/POJ-3281 题目:有不同种类的食物和饮料,每种只有1个库存,有N头牛,每头牛喜欢某些食物和某些饮料,但是一头牛 只能吃一种食物和喝 ...