python语法之正则
1、正则表达式是用来干嘛的?
用来匹配字符串的 ,其中正则是意思是模糊匹配。
就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。
字符匹配(普通字符,元字符):
1 普通字符:大多数字符和字母都会和自身匹配
>>> re.findall('alvin','yuanaleSxalexwupeiqi')
['alvin']
2 元字符:. ^ $ * + ? { } [ ] | ( ) \
元字符之. ^ $ * + ? { }
import re
ret=re.findall('a..in','helloalvin') #一个点就代表一个字符
print(ret)#['alvin']
ret=re.findall('^a...n','alvinhelloawwwn') #只从开头开始匹配,如果开头没有,那么就会匹配到空字符
print(ret)#['alvin']
ret=re.findall('a...n$','alvinhelloawwwn') #只能从结尾开始匹配
print(ret)#['awwwn']
ret=re.findall('a...n$','alvinhelloawwwn')
print(ret)#['awwwn']
ret=re.findall('abc*','abcccc')#贪婪匹配[0,+oo] #重复匹配
print(ret)#['abcccc']
ret=re.findall('abc+','abccc')#[1,+oo]
print(ret)#['abccc']
ret=re.findall('abc?','abccc')#[0,1]
print(ret)#['abc']
ret=re.findall('a?b','aaaabhghabfb')
print(ret)#['ab','ab','b']
ret=re.findall('abc{1,4}','abccc')
print(ret)#['abccc'] 贪婪匹配 #{}里面的只表示范围,指定几次,什么都不加是{1,正无穷}
注意:前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配
ret=re.findall('abc*?','abcccccc')
print(ret)#['ab']
元字符之字符集[]:
#--------------------------------------------字符集[]
ret=re.findall('a[bc]d','acd')
print(ret)#['acd'] #[]里面表示‘或’ ret=re.findall('[a-z]','acd')
print(ret)#['a', 'c', 'd'] #表示a-z都可以 ret=re.findall('[.*+]','a.cd+') #[]字符集取消元字符的特殊功能,(\ ^ -)这三个例外。
print(ret)#['.', '+'] #在字符集里有功能的符号: - ^ \ ret=re.findall('[1-9]','45dha3')
print(ret)#['4', '5', '3'] ret=re.findall('[^ab]','45bdha3')
print(ret)#['4', '5', 'd', 'h', '3'] ^放在[]里面是表示取反的意思,非a和b ret=re.findall('[\d]','45bdha3')
print(ret)#['4', '5', '3'] #\d 匹配任何十进制数;它相当于类 [0-9]。
元字符之转义符\
反斜杠后边跟元字符去除特殊功能,比如\.
反斜杠后边跟普通字符实现特殊功能,比如\d
\d 匹配任何十进制数;它相当于类 [0-9]。
\D 匹配任何非数字字符;它相当于类 [^0-9]。
\s 匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
\b 匹配一个特殊字符边界,比如空格 ,&,#等
ret=re.findall('I\b','I am LIST')
print(ret)#[]
ret=re.findall(r'I\b','I am LIST')
print(ret)#['I'] 加一个“r”才表示/b是在re模块里的意思,不加就会默认在python里面的/b。所以前者是[]。
现在我们聊一聊\,先看下面两个匹配:
#-----------------------------eg1:
import re
ret=re.findall('c\l','abc\le')
print(ret)#[]
ret=re.findall('c\\l','abc\le')
print(ret)#[]
ret=re.findall('c\\\\l','abc\le')
print(ret)#['c\\l']
ret=re.findall(r'c\\l','abc\le')
print(ret)#['c\\l'] #-----------------------------eg2:
#之所以选择\b是因为\b在ASCII表中是有意义的
m = re.findall('\bblow', 'blow')
print(m) #[]
m = re.findall(r'\bblow', 'blow')
print(m) #['blow']

import re
print(re.search('(as)+',"sdjkfasas").group()) #()作为一个整体,"+"表示对该整体进行重复匹配#asas
print(re.search("(as)|3","as63wef").group()) #|表示或, #as
print(re.search("3|(as)","as63wef").group()) #as
print(re.search("3|(as)","36aswef").group()) #
print(re.search("3|(as)","63aswef").group()) #
#其意思是字符串从左到右先匹配到谁就是谁
re模块下的常用方法:
import re # # 1
# print(re.findall('a', 'alvin yuan')) # 返回所有满足匹配条件的结果,放在列表里 #['a', 'a']
#
print(re.search('a', 'alvin yuan').group()) # 函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以
# 通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。 #a #
print(re.match('a', 'abc').group()) # 同search,不过仅在字符串开始处进行匹配 #a #
ret = re.split('[ab]', 'abcd') # 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
print(ret) # ['', '', 'cd'] #
ret = re.sub('\d', 'abc', 'alvin5yuan6', 1) #re.sub(被替换的,替换后的,字符串,替换次数)sub就相当于replace
print(ret) # alvinabcyuan6
ret = re.subn('\d', 'abc', 'alvin5yuan6')
print(ret) # ('alvinabcyuanabc', 2) #
obj = re.compile('\d{3}')
ret = obj.search('abc123eeee')
print(ret.group()) #
注意:
import re
ret=re.findall('www.(baidu|oldboy).com','www.oldboy.com')
print(ret)#['oldboy'] 这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可
ret=re.findall('www.(?:baidu|oldboy).com','www.oldboy.com')
print(ret)#['www.oldboy.com']
正则表达式的:
1、findall():所有结果都返回到一个列表里
2、search():返回匹配到的第一个对象(object),对象可以调用group方法返回结果。
3、match():只在字符串开始匹配
4、split()
import re
ret=re.split("[j,s]","djksal")#先以j为分隔符,然后在j分完的基础上用s分隔符再分
print(ret) #['d', 'k', 'al']
import re
ret=re.split("[j,s]","sdjksal")#先以j为分隔符,然后在j分完的基础上用s分隔符再分,即使s是开头,也会分出空格来
print(ret) #['', 'd', 'k', 'al']
python语法之正则的更多相关文章
- python浅谈正则的常用方法
python浅谈正则的常用方法覆盖范围70%以上 上一次很多朋友写文字屏蔽说到要用正则表达,其实不是我不想用(我正则用得不是很多,看过我之前爬虫的都知道,我直接用BeautifulSoup的网页标签去 ...
- python 爬虫之 正则的一些小例子
什么是正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是 事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符”,这个“规则字符” 来表达对字符的一种过滤逻辑. 正则并不是pyth ...
- 对 Python 语法不够了解导致的 bug
对 Python 语法不够了解导致的 bug. `in` '20' in '11264,6144,4096,3072,2048,1024,300,30' Out[7]: True a_list = ' ...
- python匹配ip正则
python匹配ip正则 #!/usr/bin/env python # -*- coding:utf-8 -*- import re ip_str = "asdad1.1.1.1sdfwe ...
- python 笔记2:python语法基础
python语法学习笔记: 1 输入输出 input(),print(). name = input('input your name : ')print('hello ,'+name)print(& ...
- python语法快速入门(1)
http://www.runoob.com/python/python-tutorial.html Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节.类似于PHP和Perl语言 ...
- python语法笔记(四)
1.对象的属性 python一切皆对象,每个对象都可能有多个属性.python的属性有一套统一的管理方案. 属性的__dict__系统 对象的属性可能来自于其类定义,叫做类属性:还可能 ...
- python语法-[with来自动释放对象]
python语法-[with来自动释放对象] http://www.cnblogs.com/itech/archive/2011/01/13/1934779.html 一 with python中的w ...
- wxpython 支持python语法高亮的自定义文本框控件的代码
在研发闲暇时间,把开发过程中比较重要的一些代码做个珍藏,下面的代码内容是关于wxpython 支持python语法高亮的自定义文本框控件的代码,应该是对大家也有用. import keywordimp ...
随机推荐
- 004之MFCSocket同步编程(指针机制)
异步与同步通信相比较,前者是非阻塞模式,后者是阻塞模式.有关两者差异在此博主中有详细讲解,推荐:https://www.cnblogs.com/wzsblogs/p/4671559.html. 采用同 ...
- 最长公共前缀(python) leetcode答案
直接上代码: def longestCommonPrefix(strs): """ :type strs: List[str] :rtype: str "&qu ...
- Cygwin工具安装和使用指导书
前言 Cygwin是一个在windows平台上运行的类UNIX模拟环境.它可以满足你在Windows系统上学习Linux基本命令操作.脚本调试的基本需求. Cygwin使用优点介绍 1.Cygwin安 ...
- 在docker集群下,使用VNC,物理机器重启后VNC失败解决
首先重装咯: sudo apt-get update sudo apt-get install ubuntu-desktop gnome-panel gnome-settings-daemon met ...
- python中configparser模块记录
python中用来读取配置文件,配置文件的格式相同于windows下的ini配置文件 一.常用函数 read(filename) #读取配置文件,直接读取ini文件内容 sections() #获取i ...
- centos中pipelinedb安装及初步使用
安装 下载安装包 https://www.pipelinedb.com/download 创建系统文件目录和日志目录 pipelinedb安装 使用非root用户,初始化pipelinedb 修改配置 ...
- 认识一下margin
标签(空格分隔): margin <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- jq动画设置图片抽奖(修改效果版)
效果:点击开始,图片转动,按钮显示"停止",点击停止,选出中奖号码,,最后一个数字停止时,按钮变为"again",点击"again"开始转动 ...
- CodeForces 900D Unusual Sequences
题目链接: https://codeforces.com/contest/900/problem/D 题意 假设有distinct 正整数序列{a1,a2,,,an},满足gcd(a1, a2, .. ...
- vue-computed计算属性用法
siytem函数可以当做变量在html中展现,列:{{siytem}} v-for(item in siytem)遍历也可以. 这个函数是从获取到的数据中,得到值后再次提取里面的数据,通过下标 me ...