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. Java SpringMVC学习--基础配置

    快速开始一个基于SpringMVC框架的web项目 开发工具 Eclipse neon.2 运行环境 tomcat8.5 1.在Eclipse中新建一个web项目:File-New-Dynamic W ...

  2. Carbon中文使用手册

    Introduction Carbon 继承了PHP的 Datetime 类和JsonSerialiable.所以 Carbon 中没有涉及到的,但在 Datetime 和JsonSerializab ...

  3. February 5 2017 Week 6 Sunday

    Prosperity discovers vice, adversity virtue. 得意时露瑕疵,逆境中见品质. Adversity will discover your virtue, not ...

  4. Docker Toolbox在window 10 home 下挂载宿主机目录到容器的正确操作

    由于我是window 10 home 而不是 pro版本,只能使用Docker Toolbox,其实docker for window对windows的支持更好,还有GUI,home版本安装Docke ...

  5. TB5上正常使用msfconsole

    在TB上使用系统自带的msfconsole,给出以下错误 [-] Failed to connect to the database: could not connect to server: Con ...

  6. 026json和pickle,xml模块

    ###json和pickle ##json#dumps()data = #源数据data = json.dumps(data)这时候的data可以写入到文件了#loads()data = f.read ...

  7. MATLAB入门学习(整合)

    整合一下,都是链接地址: MATLAB入门学习(一):初次使用.. MATLAB入门学习(二):矩阵相关 MATLAB入门学习(三):矩阵常用函数 MATLAB入门学习(四):编写简单.m文件和函数文 ...

  8. mvc:view-controller 标签

    一.SpringMVC 会把ModelAndView 的model中的数据放到request 域中 二.如果不想让请求经过任何handler,而直接响应页面,可以使用 mvc:view-control ...

  9. Django 查询集的过滤内置条件

    条件选取querySet的时候,filter表示=,exclude表示!=.querySet.distinct() 去重复__exact 精确等于 like 'aaa' __iexact 精确等于 忽 ...

  10. 【[AHOI2005]航线规划】

    树剖维护边双 首先我们看到在整个过程中图是保证连通的,于是我们并不需要LCT来维护连通性 而这些询问询问的是两个点之间关键路径的数量,也就是无论怎么走都必须走的数量,显然这就是两点之间的割边的数量 由 ...