分组在re模块中的使用以及使用正则表达式的技巧

1.split:切割

使用split不会返回被切割的字符

1 import re
2 ret = re.split("\d+","5as46asf46asf46a")
3 print(ret)

结果为:[‘‘, ‘as‘, ‘asf‘, ‘asf‘, ‘a‘]

要想返回被切割的数字,需要在正则表达式前后加( )

1 import re
2 ret1 = re.split("(\d+)","5as46asf46asf46a")
3 print(ret1)

结果为:[‘‘, ‘5‘, ‘as‘, ‘46‘, ‘asf‘, ‘46‘, ‘asf‘, ‘46‘, ‘a‘]

2.分组命名:(?P<这个组的名字>正则表达式)

1 import re
2 s = "<a>wahaha</a>"
3 ret = re.search("<\w+>(?P<abc>\w+)</\w+>",s)
4 print(ret.group())#结果为<a>wahaha</a>
5 print(ret.group("abc"))#结果为wahaha

3.使用findall可以取到分组中的内容,在表达式中加( )可以优先显示分组中的内容

1 import re
2 s = "<a>wahaha</a>"
3 ret = re.findall("<\w+>(\w+)</\w+>",s)
4 print(ret)#结果为["wahaha"]

如果要取消分组优先,使用(?:正则表达式)

1 import re
2 s = "<a>wahaha</a>"
3 ret = re.findall("<\w+>(\w+)</\w+>",s)
4 ret1 = re.findall("<\w+>(?:\w+)</\w+>",s)
5 print(ret)#结果为["wahaha"]
6 print(ret1)#结果为["<a>wahaha</a>"]

在网页html中,如果使用分组,要求使用这个名字的分组和前面的同名分组中的内容匹配的必须一致

前一个标签可以用?P<tab>,后一个标签可以用?P=tab

import re1 pattern = "<(?P<tab>\w+)>(\w+)</(?P=tab)>"
2 ret = re.search(pattern,s)
3 print(ret.group())#结果为:<a>wahaha</a>

4.

1 import re
2 ret1 = re.findall(r"\d+\.\d+|\d+","1-2*(60+(-40.35/5)-(-4*3))")
3 print(ret1)结果为:[‘1‘, ‘2‘, ‘60‘, ‘40.35‘, ‘5‘, ‘4‘, ‘3‘]

如果要过滤掉小数:

1 import re
2 ret2 = re.findall(r"\d+\.\d+|(\d+)","1-2*(60+(-40.35/5)-(-4*3))")
3 print(ret2)结果为:[‘1‘, ‘2‘, ‘60‘, ‘‘, ‘5‘, ‘4‘, ‘3‘]

原文地址:https://www.cnblogs.com/s593941/p/9494802.html

时间: 2024-10-27 02:05:17

分组在re模块中的使用以及使用正则表达式的技巧的相关文章

re模块,分组在re模块中的使用,使用正则表达式的技巧,爬虫实例

#re模块 import re # findall 返回列表 找所有的匹配项 # search 匹配就 返回一个变量,通过group取匹配到的第一个值,不匹配就返回None,group会报错 # match 相当于search的正则表达式中加了一个'^' # spilt 返回列表,按照正则规则切割,默认匹配到的内容会被切掉 # sub/subn 替换,按照正则规则去寻找要被替换掉的内容,subn返回元组,第二个值是替换的次数 # compile 编译一个正则表达式,用这个结果去search ma

os模块中关于文件/目录常用的函数使用方法

函数名 使用方法 getcwd() 返回当前工作目录 chdir(path) 改变工作目录 listdir(path='.') 列举指定目录中的文件名('.'表示当前目录,'..'表示上一级目录) mkdir(path) 创建单层目录,如该目录已存在抛出异常 makedirs(path) 递归创建多层目录,如该目录已存在抛出异常,注意:'E:\\a\\b'和'E:\\a\\c'并不会冲突 remove(path) 删除文件 rmdir(path) 删除单层目录,如该目录非空则抛出异常 remov

re模块中常用功能函数

re模块中常用功能函数 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python 语言拥有全部的正则表达式功能. compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象.该对象拥有一系列方法用于正则表达式匹配和替换. re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数. re.match函数

re模块中的非贪婪匹配

python的re模块中有贪婪匹配和非贪婪匹配之分,当使用*时会匹配零个或多个,使用+时会匹配一个或多个.当使用?在前边特殊符号前时会进行非贪婪匹配,匹配零个或者一个,今天主要讨论非贪婪匹配中存在的坑. import re res = re.findall('a?','aaa') print(res) #['a', 'a', 'a', ''] res1 = re.findall('pa?','paaa') print(res1) #['pa'] res2 = re.findall('.?','a

urllib模块中的方法

urllib模块中的方法 1.urllib.urlopen(url[,data[,proxies]]) 打开一个url的方法,返回一个文件对象,然后可以进行类似文件对象的操作.本例试着打开google >>> import urllib >>> f = urllib.urlopen('http://www.google.com.hk/') >>> firstLine = f.readline()   #读取html页面的第一行 >>>

Python 3.X 调用多线程C模块,并在C模块中回调python函数的示例

由于最近在做一个C++面向Python的API封装项目,因此需要用到C扩展Python的相关知识.在此进行简要的总结. 此篇示例分为三部分.第一部分展示了如何用C在Windows中进行多线程编程:第二部分将第一部分的示例进行扩展,展示了如何在python中调用多线程的C模块:第三部分扩展了第二部分,增加了在C模块的线程中回调python的演示. 本文所用的环境为:64位Win7 + python 3.4 x86 + vs2010 一.windows下的C语言多线程程序 windows下多线程编程

Python学习心得(三)函数之任意数量实参、任意数量关键字实参、导入模块中的函数

#!/usr/bin/python # -*- coding:utf-8 -*- ''' 1.传递任意数量的实参 Python允许函数传入任意数量的实参,例如: *messages形参名中的*表示让Python创建一个空的名称为messages的元组,接收传入的所有值 ''' def get_person_message(*messages): concat = '' for message in messages: concat += ' ' + message print "\nShow P

Python 学习之路 - 模块概念,模块中的特殊变量,os、sys模块

模块概念 1 #注意:自定义的模块名不与标准模块名相同,若相同只会导入自定义模块 2 #单模块并在同一目录下: 3 #直接用 import 模块名,调用时用 模块名.方法名() 4 #嵌套在其他文件夹下: 5 #from xxx import xxx as 别名 6 import example 7 import lib.commons 8 from lib import commons as lib_commons 9 from src import commons as src_common

Stitching模块中focalsFromHomography初步研究

在Stitching模块中,通过"光束法平差"的时候,有一个步骤为"通过单应矩阵估算摄像头焦距",调用的地方为: void focalsFromHomography(const Mat& H, double &f0, double &f1, bool &f0_ok, bool &f1_ok){    CV_Assert(H.type() == CV_64F && H.size() == Size(3, 3));