正则表达式
来源:互联网 发布:spss案例数据免费下载 编辑:程序博客网 时间:2024/06/03 06:49
在python中内嵌re模块.
普通字符:如‘test'’,abc这类的
元字符(通配字符):‘.’,‘*’,‘$’,'[]' '{}' ,'\',‘+’,‘?‘,’’ '^'等等
str=r"abc"
导入re模块
re.findall(str,'abbc')#在“abbc”中寻找str这个字符串,其中str表示一个查找规则或者说是模板也行。不过这个模板str=r'abc’这样定义才行。这个方法会返回查找到的结果
[ ],通常用来指定一个范围例如[a-z],[0-9],匹配其中某一个字符,但是一般里面若有元字符,则会表示普通字符例如[abc$],[ab^c],但不过里面有个特殊的表示,就是[^abc].这表示除了abc这三个字符,[^0-9]除了0-9数字外的任意字符。大小写加数字[0-9a-zA-Z]
' | '或,'&’且
^开头 str=r’^hello'开头是否含有hello
$表示末尾 str=r'$hello' 行尾是否含有hello
'\'脱义字符 例如 str=r'\^root' 匹配字符"^root"
反斜杠加某些字符的特殊含义,单次匹配
\d 匹配任何十进制数字相当于[0-9]
\D匹配任何非数字字符相当于[^0-9]
\s匹配任何空白字符相当于[\t\r\n\f\v]
\S匹配任何非空白字符相当于[^\t\r\n\f\v]
\w匹配任何字母数字相当于[0-9a-zA-Z]
\W匹配任何非字母数字相当于[^0-9a-zA-Z]
重复匹配元字符
*匹配前面字符0次或者多次
{}表示匹配前面字符重复的次数,例如 a{8},表示需要匹配前面8个a
+前面字符至少出现1次
?将前面的字符重复0次或者1次。也就是用于那种可有可无的符号的场景
{1,3}将前面字符至少重复1-3次 例如 a{1,3}b表示a可重复1-3次
"()"分组
用re.findall()会优先返回分组里面的匹配项
>>> s=r'\w{4}\.(com|cn)'
>>> re.findall(s,"1234.com")
['com']
上面所写的str=r’[0-9]ab.*' 正则表达格式是解释型的。
下面是对象编译型的,就是把str这种格式编译成一种对象。
其中要用到re模块
import re
p=re.complie(r’[0-9]ab.*') 这就把正则表达格式转变成了对象p
re.compile(x,y),x为正则格式,y为其它的参数 例如当y为re.I 表示忽略大小写
re.findall(x,y)也可以用这种属性
y参数除了I以外还有其他的参数
S使.匹配包括换行在内的所有字符
>>> s=r'net.net'
>>> re.findall(s,"netonet")
['netonet']
>>> re.findall(s,"net\nnet")
[]
>>> re.findall(s,"net\nnet",re.S)
['net\nnet']
L
M多行匹配,影响^和$
>>> s="""
... hello dai
... hello zi
... daixiangzi ok
... """
>>> s
'\nhello dai\nhello zi\ndaixiangzi ok\n'
>>> re.findall(r'^hello',s)
[]
>>> re.findall(r'^hello',s,re.M)
['hello', 'hello']
X能够使用REs和verbosre状态。
>>> s="""
... \d{3,4}
... -?
... \d{8}
... """
>>> re.findall(s,'010-12345678')
[]
>>> re.findall(s,'010-12345678',re.X)
['010-12345678']
re.complie(r’abc',re.I)
这样做的结果会使得匹配速度快很多。
re对象中有几种常用的方法/属性
match():决定RE是否在字符串刚开始的位置匹配。调用形式:p.match(str)
search():扫描字符串,找到这个RE匹配的位置。调用形式p.search(str)
上面两个如果没有匹配到就会返回None,查找成功就会返回一个对象
findall()找到所有和RE匹配的子串,并作为一个列表返回
finditer()找到RE所有匹配的 子串,并把他们作为一个迭代器返回
如果要看matchObject对象里面的内容,就需要用group这个方法
例如x=p.match(str)
x.group()
>>> p.search("adc abc")
<_sre.SRE_Match object at 0xb76a8f70>
>>> x=p.search("adc abc")
>>> x.group()
'abc'
还有end()返回结束位置
start()返回开始位置
span()返回一个元组包含匹配(开始,结束)的位置
>>> import re
>>> p=re.compile(r'abc')
>>> x=p.match("abc der")
>>> x.group()
'abc'
>>> x.end()
3
>>> x.start()
0
>>> x.span()
(0, 3)
re.sub(re,替换字符,被替字符,【替换次数,省略的时候默认全部替换】) 返回的替换后的字符串
和str.replace(被替换字符,替换字符)不同的是,sub是符号re正则的才会被替换
re.split(re,str)根据re正则表达式对str进行分割
>>> str="123+232-212*454"
>>> r=r'[\+\-\*]'
>>> re.split(r,str)
['123', '232', '212', '454']
若想看re模块里面所有的方法用dir(re)就可以 查看方法使用信息用help(方法)
”()”分组用法小例子
>>> print s
dad hello src=da 11323 43
hello src=dfds dsf
src=dasd 243 fds
>>> r1=r'hello src=.+'
>>> re.findall(r1,s)
['hello src=da 11323 43', 'hello src=dfds dsf']
>>> r1=r'hello src=(.+)'
>>> re.findall(r1,s)
['da 11323 43', 'dfds dsf']
- 【正则表达式】正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- Android菜鸟之学习android源码之三(修改系统默认横屏)
- Win32环境下编译Caffe应用
- POJ 1061 青蛙的约会【exgcd】
- 微信小程序常见问题汇总
- webconfig添加<staticContent> <mimeMap>
- 正则表达式
- Android设置圆角图,如两个圆角--工具类
- Activity启动模式 及 Intent Flags 与 栈 的关联分析
- springboot data rest 2
- iis升级至4,0
- POJ 1077 Eight (正向BFS + 康托展开)
- 1020. Tree Traversals (25)
- Android手机系统开发中的AP和BP是什么
- 单一职责原则(Single Responsibility Principle ,SRP)