python--re模块(正则表达式)
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模块(正则表达式)的更多相关文章
- Python re模块 正则表达式
1 简介 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C ...
- Python re模块正则表达式
- Python::re 模块 -- 在Python中使用正则表达式
前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...
- python的re正则表达式模块学习
python中re模块的用法 Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析.复杂字符串分析和信息提取时是一个非常有用的工 ...
- Python之re模块 —— 正则表达式操作
这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python的语法冲突, ...
- Python中的re模块--正则表达式
Python中的re模块--正则表达式 使用match从字符串开头匹配 以匹配国内手机号为例,通常手机号为11位,以1开头.大概是这样13509094747,(这个号码是我随便写的,请不要拨打),我们 ...
- python常用模块(1):collections模块和re模块(正则表达式详解)
从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来 ...
- python模块 re模块与python中运用正则表达式的特点 模块知识详解
1.re模块和基础方法 2.在python中使用正则表达式的特点和问题 3.使用正则表达式的技巧 4.简单爬虫例子 一.re模块 模块引入; import re 相关知识: 1.查找: (1)find ...
- Python全栈 正则表达式(概念、、语法、元字符、re模块)
前言: 普通人有三件东西看不懂:医生的处方,道士的鬼符,程序员得正则表达式 什么是正则表达式? 正则表达式,又称规则表达式,英文名为Regular Expression,在代 ...
- 【Python开发】Python之re模块 —— 正则表达式操作
Python之re模块 -- 正则表达式操作 这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式 ...
随机推荐
- linux防火墙放行了端口,但是仍然访问不到
我们的防火墙默认规则如下: 如果防火墙放行了端口,但是仍然访问不到的话,可能是因为添加规则的时候,用的是iptables -A 选项,这样,增加的规则会排列在 第6条 规则后面,虽然service i ...
- Python+Selenium2自动化测试之IE、chrome浏览器启动
构建Python+Selenium2自动化测试环境完成之后,就需要测试支持python的selenium的版本是否都支持在不同浏览器上运行,当前我们分别在三个最通用的浏览器上通过脚本来测试. 1.在I ...
- dubbox源码分析(一)-服务的启动与初始化
程序猿成长之路少不了要学习和分析源码的.最近难得能静得下心来,就针对dubbox为目标开始进行源码分析. [服务提供方] 步骤 调用顺序 备注 容器启动 com.alibaba.dubbo.conta ...
- SchemaSpy
SchemaSpy https://github.com/schemaspy/schemaspy/releases https://sourceforge.net/projects/schemaspy ...
- AngularJs学习笔记--I18n/L10n
原版地址:http://code.angularjs.org/1.0.2/docs/guide/i18n 一.I18n and L10n in AngularJS 1. 什么是I18n和L10n? 国 ...
- 计算机名称和IP地址
获取本地IP地址 得到远程机IP地址与描述 若仅仅是查看IP地址
- select下拉框之默认选项清空
最近和小伙伴发现,select默认选项一般是提示信息,怎么才能让当我们点击下拉框时,可选的选项中没有默认的提示信息呢? 思路: 1.当点击下拉框时,让默认提示信息,即下拉框第一个选项移除. 2.当没有 ...
- OC报错,after command failed: Directory not empty
Directory not empty这个错误经常出现,出现的原因也很多,今天主要记录一下楼主自己碰到的这种情况. 全部错误提示: error: couldn't remove ‘路径/app-fzy ...
- SSH secure 连接centos7乱码
1.SSH secure 连接centos7乱码 修改文件 /etc/local.conf LANG="zh_CN.UTF-8"修改为LANG=”zh_CN.GB18030” 然 ...
- PAT——年会抽奖(错位 排序)
题目描述 今年公司年会的奖品特别给力,但获奖的规矩却很奇葩: 1. 首先,所有人员都将一张写有自己名字的字条放入抽奖箱中:2. 待所有字条加入完毕,每人从箱中取一个字条:3. 如果抽到的字条上写的就是 ...