正则表达式和Python中的re模块

正则表达式

在编写处理字符串的程序或网页时,经常有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

  常用语法

  

  特殊用法和现象

      

      在量词的后面跟了一个 ? 取消贪婪匹配 非贪婪(惰性)模式  最常用  .*?x 匹配任意字符直到找到一个x

      

Python的re模块 

  八个主要方法:

import re
ret=re.findall(‘\d+‘,‘fsf4131s4fsg74dsf‘)   # 匹配字符串中所有需要的内容
print(ret)                                      #参数:正则表达式,字符串 ,返回一个装有所有匹配上的结果的列表 若没有则是一个空列表
#结果:[‘4131‘, ‘4‘, ‘74‘]

ret2=re.search(‘\d+‘,‘fng231523jsk6313‘)  #匹配字符串中第一个需要的内容
print(ret2)                                  #参数:正则表达式,字符串,若匹配正确则返回匹配结果的对象用group查看,若没有则返回None
print(ret2.group())
#结果:
# <_sre.SRE_Match object; span=(3, 9), match=‘231523‘>
# 231523

ret3=re.match(‘\d+‘,‘3fsfs‘)            #匹配字符串中开头的内容
print(ret3)                              #参数:正则表达式,字符串,若匹配正确则返回匹配结果的对象用group查看,若没有则返回None
print(ret3.group())
#结果:
# <_sre.SRE_Match object; span=(0, 1), match=‘3‘>
# 3

ret4=re.split(‘\d+‘,‘3fsfs565df6s5dg6gd2‘)   #按需要对字符串进行切割
print(ret4)                              #参数:正则表达式,字符串 返回切割剩下的值组成的一个列表,当被切割的值处于开头和结尾时,会在列表中留下一个空字符
ret4.remove(‘‘)
ret4.remove(‘‘)
print(ret4)
res=re.split(‘(\d+)‘,‘fsfs5df6s5dg6gd‘)  #,可以对正则表达式进行分组(优先显示) 将被切割值显示出来,
print(res)
#结果:
# [‘‘, ‘fsfs‘, ‘df‘, ‘s‘, ‘dg‘, ‘gd‘, ‘‘]
# [‘‘, ‘fsfs‘, ‘df‘, ‘s‘, ‘dg‘, ‘gd‘]
# [‘fsfs‘, ‘5‘, ‘df‘, ‘6‘, ‘s‘, ‘5‘, ‘dg‘, ‘6‘, ‘gd‘]

ret5=re.sub(‘\d+‘,‘B‘,‘afssggsdg45sg45s4g5s‘,3) #按需要对字符串进行替换   默认符合要求的全部替换,可以设置替换次数
print(ret5)                                       #参数:正则表达式,替换后的内容,字符串 返回替换后的字符串
#结果:afssggsdgBsgBsBg5s
ret6=re.subn(‘\d+‘,‘B‘,‘fsd4gg5h4gzx323s‘,3)   #按需要对字符串进行替换   默认符合要求的全部替换,可以设置替换次数
print(ret6)                                        #参数:正则表达式,替换后的内容,字符串 返回一个由替换后的字符串和替换次数组成的元组
#结果:(‘fsdBggBhBgzx323s‘, 3)

res=re.compile(‘-[1-9]\d*[.\d]*|-0\.\d*[1-9]\d*‘)  #对正则表达式进行编译,需要用到的时候可以配合其他方法使用
ret7=res.findall(‘-205fsf-21sd-2.5g6gg5g‘)
print(ret7)
#结果:[‘-205‘, ‘-21‘, ‘-2.5‘]

ret8=re.finditer(‘\d+‘,‘f56s5f3s‘)   # 用法与findall类似,但返回值是一个生成器 ,对生成器迭代得到匹配到的结果的对象 再用group取值
for i in ret8:
    print(i)
    print(i.group())
#结果:
# <_sre.SRE_Match object; span=(1, 3), match=‘56‘>
# 56
# <_sre.SRE_Match object; span=(4, 5), match=‘5‘>
# 5
# <_sre.SRE_Match object; span=(6, 7), match=‘3‘>
# 3

  

  分组优先

     findall 会优先显示分组中的内容,要想取消分组优先,(?:正则表达式)       split 遇到分组 会保留分组内被切掉的内容       search 如果search中有分组的话,通过group(n)就能够拿到group中的匹配的内容
   
import re
ret = re.findall(‘-0\.\d+|-[1-9]\d*(\.\d+)?‘,‘-1asdada-200‘)
print(ret) #结果:[‘‘, ‘‘]
ret = re.findall(‘-0\.\d+|-[1-9]\d*(?:\.\d+)?‘,‘-1asdada-200‘)
print(ret) #结果 [‘-1‘, ‘-200‘]
ret = re.findall(‘www.baidu.com|www.oldboy.com‘,‘www.oldboy.com‘)
print(ret) #结果:[‘www.oldboy.com‘]
ret = re.findall(‘www.(baidu|oldboy).com‘,‘www.oldboy.com‘)
print(ret) #结果:[‘oldboy‘]
ret = re.findall(‘www.(?:baidu|oldboy).com‘,‘www.oldboy.com‘)
print(ret) #结果:[‘www.oldboy.com‘]

ret = re.split(‘\d+‘,‘alex83egon20taibai40‘)
print(ret) #结果:[‘alex‘, ‘egon‘, ‘taibai‘, ‘‘]
ret = re.split(‘(\d+)‘,‘alex83egon20taibai40‘)
print(ret) #结果:[‘alex‘, ‘83‘, ‘egon‘, ‘20‘, ‘taibai‘, ‘40‘, ‘‘]

ret = re.search(‘\d+(.\d+.\d+)(.\d+)?‘,‘1.2.3.4-2*(60+(-40.35/5)-(-4*3))‘)
print(ret.group(0)) #结果:1.2.3.4  此处group参数 0 可以省略
print(ret.group(1)) #结果:.2.3
print(ret.group(2)) #结果:.4

  分组命名    

      (?P<name>正则表达式) 表示给分组起名字          (?P=name)表示使用这个分组,这里匹配到的内容应该和分组中的内容完全相同
import re
ret = re.search("<(?P<name>\w+)>(?P<content>\w+)</(?P=name)>","<h1>hello</h1>")
print(ret.group(‘name‘))  #结果 :h1
print(ret.group(‘content‘))  #结果 :hello
print(ret.group())           #结果 :<h1>hello</h1>

  通过索引使用分组

import re
ret = re.search(r"<(\w+)>\w+</(\w+)><\1>\w+</\2>","<h1>hello</h1><h1>hello</h1>")
print(ret.group(1))  #结果: h1    \1 \2 对应前面第几个分组,里面的的内容必须跟对应分组的内容一样,否则会报错
print(ret.group())  #结果 :<h1>hello</h1>

  工具网址:http://tool.chinaz.com/regex/?qq-pf-to=pcqq.group

原文地址:https://www.cnblogs.com/luxiangyu111/p/9438090.html

时间: 2024-10-11 06:17:25

正则表达式和Python中的re模块的相关文章

正则表达式与Python中re模块的使用

正则表达式与Python中re模块的使用 最近做了点爬虫,正则表达式使用的非常多,用Python做的话会用到re模块. 另外,给大家介绍一个在线测试正则表达式的神器网站:http://tool.chinaz.com/regex 大家可以去这里练习正则表达式 下面总结一下正则表达式与re模块的基础与使用. 正则表达式 使用场景 关于正则表达式的基本概念这里就不赘述了,大家可以去各种百科里查找它的定义.正则的使用场景主要分为两个: 一是:检测某一段字符串是否符合规则,也就是我们常说的"校验"

Python中的random模块,来自于Capricorn的实验室

Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 random.uniform random.uniform的函数原型为:random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限.如果a > b,则生成的随机数n: a <= n <= b.如果 a <

python中查看可用模块

1.这种方式的问题是,只列出当前import进上下文的模块. 进入python命令行.输入以下代码: >>>import sys >>>sys.modules 2.在python命令行下输入: >>>help() help>modulespython中查看可用模块,布布扣,bubuko.com

python中动态导入模块

如果导入的模块不存在,Python解释器会报 ImportError 错误: >>> import something Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named something 有的时候,两个不同的模块提供了相同的功能,比如 StringIO 和 cStringIO 都提供了Strin

Python中的random模块

Python中的random模块 (转载自http://www.cnblogs.com/yd1227/archive/2011/03/18/1988015.html) Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 random.uniform random.uniform的函数原型为:random.uniform(a, b),

解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题

问题: 我在ubuntu14.04下用python中的matplotlib模块内的pyplot输出图片不能显示中文,怎么解决呢? 解决: 1.指定默认编码为UTF-8: 在python代码开头加入如下代码 import sys reload(sys) sys.setdefaultencoding('utf-8') 2.确认你ubuntu系统环境下拥有的中文字体文件: 在终端运行命令"fc-list :lang=zh",得到自己系统的中文字体 命令输出如下: /usr/share/fon

(转)Python中的random模块

Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 random.uniform random.uniform的函数原型为:random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限.如果a > b,则生成的随机数n: a <= n <= b.如果 a <

转载:python中的copy模块(浅复制和深复制)

主要是介绍python中的copy模块. copy模块包括创建复合对象(包括列表.元组.字典和用户定义对象的实例)的深浅复制的函数. ########copy(x)########创建新的复合对象并通过引用复制x的成员来创建x的浅复制.更加深层次说,它复制了对象,但对于对象中的元素,依然使用引用.对于内置类型,此函数并不经常使用.而是使用诸如list(x), dict(x), set(x)等调用方式来创建x的浅复制,要知道像这样直接使用类型名显然比使用copy()快很多.但是它们达到的效果是一样

Python中的logging模块【转】

基本用法 下面的代码展示了logging最基本的用法. 1 # -*- coding: utf-8 -*- 2 3 import logging 4 import sys 5 6 # 获取logger实例,如果参数为空则返回root logger 7 logger = logging.getLogger("AppName") 8 9 # 指定logger输出格式 10 formatter = logging.Formatter('%(asctime)s %(levelname)-8s: