RE是什么

正则 表达 式子

就是一些带有特殊含义的符号或者符号的组合

它的作用是对字符串进行过滤

在一堆字符串中找到你所关心的内容

你就需要告诉计算机你的过滤规则是什么样 通过什么方式来告诉计算机 就通过正则表达式

注: re模块的内部实现 不是python 而是调用了c库

import re

s = "abc a1c 12\+- $_\n\tqaz" #定义字符串

b = "a ab abb abbb abbbbb a1bbbbbbbb" #定义字符串

\w

#匹配所有字母数字下划线

\W

#匹配所有非字母数字下划线

\s

#匹配所有空白字符

\S

#匹配所有非空白字符

\d

#匹配所有数字

\D

#匹配所有非数字

\n

#匹配所有的\n

\t

#匹配所有的\t

^ab

#从开头匹配字符串ab,只匹配一次

qaz$

#从结尾匹配字符串qaz,只匹配一次

.

代表除了换行符外的任意一个字符

?

不能单独用,代表左边的那一个字符重复0次或一次

*

代表左边的那一个字符重复0次或多次

+

代表左边的那一个字符重复1次或多次(至少出现一次)

{m,n}

代表左边的那一个字符出现m次到n次(n不写,代表无穷次)

.*

匹配任意长度,任意的字符-----》贪婪匹配(例:a.*c,从a开始,会一直找到最右边一个c,中间所有的字符都获取了,比较贪婪)

.*?

非贪婪匹配,找到最近的即可

()

分组:带括号去匹配,如果匹配成功,只留下括号内的字符串

[]

中括号内可以放任意字符,一个中括号代表一个字符,,这一个字符来自于中括号内

"""

re模块常用方法:

findall 从左往右查找所有满足条件的字符 返回一个列表

search 返回第一个匹配的字符串 结果封装为对象 span=(0, 5) 匹配的位置 match匹配的值

match 匹配行首 返回值与search相同

对于search match 匹配的结果通过group来获取

compile 将正则表达式 封装为一个正则对象 好处是可以重复使用这个表达式

"""

例子:

print(re.findall("\w",s)) #匹配所有字母数字下划线

print(re.findall("\W",s)) #匹配所有非字母数字下划线

print(re.findall("\s",s)) #匹配所有空白字符

print(re.findall("\S",s)) #匹配所有非空白字符

print(re.findall("\d",s)) #匹配所有数字

print(re.findall("\D",s)) #匹配所有非数字

print(re.findall("\n",s)) #匹配所有的\n

print(re.findall("\t",s)) #匹配所有的\t

print(re.findall("^ab",s)) #从开头匹配字符串,只匹配一次

print(re.findall("qaz$",s)) #从结尾匹配字符串,只匹配一次

# .代表除了换行符外的任意一个字符(要想可以匹配换行符,findall方法里可以加参数,re.DOTALL--DOT:点,ALL:所有)

print(re.findall("a.c",s)) #['abc', 'a1c']

# ? 不能单独用,代表左边的那一个字符重复0次或一次

print(re.findall("ab?",b)) #['a', 'ab', 'ab', 'ab', 'ab', 'a']

print(re.findall("ab{0,1}",b)) #['a', 'ab', 'ab', 'ab', 'ab', 'a']

# *代表左边的那一个字符重复0次或多次

print(re.findall("ab*",b)) #['a', 'ab', 'abb', 'abbb', 'abbbbb', 'a']

print(re.findall("ab{0,}",b)) #['a', 'ab', 'abb', 'abbb', 'abbbbb', 'a']

# + 代表左边的那一个字符重复1次或多次(至少出现一次)

print(re.findall("ab+",b)) #['ab', 'abb', 'abbb', 'abbbbb']

print(re.findall('ab{1,}',b)) #['ab', 'abb', 'abbb', 'abbbbb']

# {m,n}代表左边的那一个字符出现m次到n次(n不写,代表无穷次)

# .* 匹配任意长度,任意的字符-----》贪婪匹配(从a开始,会一直找到最右边一个c,中间所有的字符都获取了,比较贪婪)

print(re.findall("a.*c","a123c456c")) #['a123c456c']

# .*? 非贪婪匹配,找到最近的即可

print(re.findall("a.*?c","a123c456c")) #['a123c']

#分组:带括号去匹配,如果匹配成功,只留下括号内的字符串

print(re.findall("(abc)_sb","abc_sb sadsaddasdaabc_sb")) #['abc', 'abc']

#[]:中括号内可以放任意字符,一个中括号代表一个字符,,这一个字符来自于中括号内

# 在中括号内,“-”有特殊含义,当需要使用-的普通字符来使用的时候,把-放到[]的最左边或者最右边

print(re.findall("a[0-9]c","a1c a c a-c a+c aAc")) #['a1c']

print(re.findall("a[a-z]c","a1c a c a-c a+c aAc acc")) #['acc']

print(re.findall("a[A-Z]c","a1c a c a-c a+c aAc acc")) #['aAc']

print(re.findall("a[*+-]c","a1c a c a-c a+c a*c aAc acc")) #['a-c', 'a+c', 'a*c']

#^上尖号在中阔内表示取反的意思,并不是以某某开头

print(re.findall("a[^a-z]c","a1c a c a-c a+c aAc acc")) #['a1c', 'a c', 'a-c', 'a+c', 'aAc'](除了acc,都在这儿了)

print(re.findall("([a-z]+)_sb","lxx_sb sadadw213sdaalex_sb egon_sbasdasd "))

# | 竖杠 代表或者的意思

print(re.findall("compan(ies|y)","too many companies shutdown,I have a company"))

#['ies', 'y'],这个结果不是我们需要的,它只打印了ies或者y

print(re.findall("compan(?:ies|y)","too many companies shutdown,I have a company"))

#['companies', 'company']加上 ?: 表示前面的也需要,再加上竖杠选择的结果。

print(re.findall("alex|sb","alex is sb asdasdadalex sadasb egon")) #['alex', 'sb', 'alex', 'sb']

#re模块的其他方法:

# search :只找一个,如果找到,就返回一个找到的对象,用group方法可以得到对应的值。

# match :相当于带上尖号版本的search,它是也用group方法获得对应的值

print(re.search("alex","alex is sb asdasdadalex sadasb egon"))

#<_sre.SRE_Match object; span=(0, 4), match='alex'>

print(re.search("alex","alex is sb asdasdadalex sadasb egon").group()) #alex

print(re.match("alex","alex is sb asdasdadalex sadasb egon")) #<_sre.SRE_Match object; span=(0, 4), match='alex'>

print(re.search("^alex","sad asd alex is sb asdasdadalex sadasb egon")) #None

print(re.match("alex","sad asd alex is sb asdasdadalex sadasb egon")) #None

#spilt方法

print(re.split("[a,w]","1a2w3e4r"))

使用字符串替换

# print('egon is beutifull egon'.replace('egon','EGON',1))

使用sub方法替换第二处的egon,替换为EGON

# print(re.sub('(.*?)(egon)(.*?)(egon)(.*?)',r'\1\2\3EGON\5','123 egon is beutifull egon 123'))

# (123 )(egon)( is beutifull )(egon)( 123)

#\1\2\3EGON\5

# print(re.sub('(lqz)(.*?)(SB)',r'\3\2\1',r'lqz is SB'))

# print(re.sub('([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)',r'\5\2\3\4\1',r'lqzzzz123+ is SB'))

#(lqzzzz)(123+ )(is)( )(SB)

如果经常需要用到某个正则表达式,可以先存起来,然后直接调用,存的方法是complie

pattern=re.compile('alex')

print(pattern.findall('alex is alex alex'))

print(pattern.findall('alexasdfsadfsadfasdfasdfasfd is alex alex'))

python--re模块(正则表达式)的更多相关文章

  1. Python re模块 正则表达式

    1 简介 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C ...

  2. Python re模块正则表达式

  3. Python::re 模块 -- 在Python中使用正则表达式

    前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...

  4. python的re正则表达式模块学习

    python中re模块的用法   Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析.复杂字符串分析和信息提取时是一个非常有用的工 ...

  5. Python之re模块 —— 正则表达式操作

    这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python的语法冲突, ...

  6. Python中的re模块--正则表达式

    Python中的re模块--正则表达式 使用match从字符串开头匹配 以匹配国内手机号为例,通常手机号为11位,以1开头.大概是这样13509094747,(这个号码是我随便写的,请不要拨打),我们 ...

  7. python常用模块(1):collections模块和re模块(正则表达式详解)

    从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来 ...

  8. python模块 re模块与python中运用正则表达式的特点 模块知识详解

    1.re模块和基础方法 2.在python中使用正则表达式的特点和问题 3.使用正则表达式的技巧 4.简单爬虫例子 一.re模块 模块引入; import re 相关知识: 1.查找: (1)find ...

  9. Python全栈 正则表达式(概念、、语法、元字符、re模块)

    前言:        普通人有三件东西看不懂:医生的处方,道士的鬼符,程序员得正则表达式       什么是正则表达式? 正则表达式,又称规则表达式,英文名为Regular Expression,在代 ...

  10. 【Python开发】Python之re模块 —— 正则表达式操作

    Python之re模块 -- 正则表达式操作 这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式 ...

随机推荐

  1. Python学习---高阶函数的学习

    高阶函数 高阶函数:函数名可以作为参数传递输入,函数名还可以作为返回值返回 函数名可以重新赋值,因为其本身就是一个变量    函数本身就是一个对象,    函数的变量名f本身就是指向函数本身的,加上括 ...

  2. 一道算法题-八皇后问题(C++实现)

    八皇后问题 一.题意解析 国际象棋中的皇后,可以横向.纵向.斜向移动.如何在一个8X8的棋盘上放置8个皇后,使得任意两个皇后都不在同一条横线.竖线.斜线方向上?八皇后问题是一个古老的问题,于1848年 ...

  3. C++ int与string的相互转换(含源码实现)

    一.int转换成string Ⅰ.to_string函数 c++11标准增加了全局函数std::to_string: string to_string (int val); string to_str ...

  4. .C#认证考试试题汇编:第一单元:1,11 第二单元:1,11

    第一单元1,11 好久没用异或都快忘了,就让我们一起来了解哈啥子事异或 说的这个,就不经意让我想起书上的几种交换值得方法了 我这儿说的交换的方法是,不使用第三个变量来交换,而是两个 实现条件是C a= ...

  5. VMware workstation 虚拟机安装帮助文档(以windows server 2003为例)

    本次安装以Windows server 2003为例: 1.在桌面上双击VMware快捷方式打开,并点击文件>新建虚拟机 2.这里选择默认的“典型”,点击下一步 3.选择浏览,找到windows ...

  6. 理解Underscore中的restArgs函数

    虽然Underscore并没有在API手册中提及到restArgs函数,我们仍然可以通过_.restArgs接口使用restArgs函数.如果不去阅读源码,我们很难发现Underscore中还有这样的 ...

  7. (五)多点触控之兼容ViewPager

    在上一篇文章中,自定义的ZoomImageView已经实现了自由缩放,自由移动以及双击放大与缩小的功能.已经可以投入使用这个控件了.下面我们就在ViewPager中使用这个控件.如果你还没读过上一篇文 ...

  8. 如何理解“Unix 里一切都是文件”这句话-在 UNIX 中,一切都是字节流

    UNIX 操作系统的设计.用户界面.文化和演变都是建立在它的一套统一的想法和概念上.其中最重要的一点可能是“一切皆文件”,而这个概念被认为是 UNIX 的灵魂之一. 这一关键设计原则提供了一个统一的范 ...

  9. __future__模块

    Python提供了__future__模块,把下一个新版本的特性导入到当前版本,于是我们就可以在当前版本中使用一些新版本的特性,比如除法: 在Python 2.x中,对于除法有两种情况,如果是整数相除 ...

  10. 相机姿态估计(Pose Estimation)

    (未完待续.....) 根据针孔相机模型,相机成像平面一点的像素坐标p和该点在世界坐标系下的3D坐标P有$p=KP$的关系,如果用齐次坐标表示则有: $$dp=KP$$ 其中d是空间点深度(为了将p的 ...