加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式

发布时间:2020-12-14 06:10:07 所属栏目:百科 来源:网络整理
导读:d 数字 D 非数字 w 字符(含字母、数字、下划线) W 非字符(一般指标点、特殊字符及空白等) s 空白(t? n? r???等 ) S 非空白(字符、数字、下划线、标点、特殊字符等) [a-zA-Z]? (大小写字母) [sw]? 空白或者字符 {1,3} 指匹配数量 1-3个

d 数字

D 非数字

w 字符(含字母、数字、下划线)

W 非字符(一般指标点、特殊字符及空白等)

s 空白(t? n? r???等 )

S 非空白(字符、数字、下划线、标点、特殊字符等)

[a-zA-Z]? (大小写字母)

[sw]? 空白或者字符

{1,3} 指匹配数量 1-3个都满足,贪婪,最多的进行匹配

+ ?1个或者多个

*?? 0个或者多个,如果匹配到0 便不会继续匹配

? 0个或者1个 限制贪婪,如果匹配到0 便不会继续匹配

^如果是 r‘^abc‘?,则表示 以abc开头的匹配

如果是[^abc],则表示非 abc,即不包含abc的匹配

$ 表示匹配结尾

一些常用的方法,match,search,findall,finditer,.group(),split,sub

示例代码:

#coding=gbk
‘‘‘
1、正则表达式
‘‘‘

import re
#re.DOTALL  加上这个参数, . 就可以匹配n了

print(re.findall(r.+,abcbcdnertndfffn,re.DOTALL))

#结果:[‘abcbcdnertndfffn‘]

#p.flags  (?P<sign>.*)是命名分组
p=re.compile(r(w+)(w+)(?P<sign>.*),re.DOTALL)

print(p.flags:,p.flags)

#re.I  忽略大小写

print(re.findall(raBc,sefs abcee ABC AbCf gggaBc,re.I))
#结果:[‘abc‘,‘ABC‘,‘AbC‘,‘aBc‘]

#p.groups 分组数量
p.groupindex

#match 从哪个区间位置开始匹配

print(re.match(rabc,eeabcttabc,2))##这个有问题,要使用re的编译对象pp

pp=re.compile(rabcw+)
print(pp.match(eeabcttabcuu,7))
#结果abcuu

#search 同样可以输入初始位置及结束位置

print(pp.search(eeabcttabcyy,7).group())
#结果abcyy

#findall 只返回分组内的内容
print(re.findall(r[a-zA-Z]+(d+),aa1bn2mj33gh44hhh55))
#结果:[‘1‘,‘2‘,‘33‘,‘44‘,‘55‘]

#多个分组则以元组形式返回
print(re.findall(r([a-zA-Z]+)(d+),aa1bn2mj33gh44hhh55))
#结果:[(‘aa‘,‘1‘),(‘bn‘,‘2‘),(‘mj‘,‘33‘),(‘gh‘,‘44‘),(‘hhh‘,‘55‘)]

print(re.findall(r(([a-z])(d+)([a-z])),a1ab2bc3cd4d))#嵌套分组,先返外层分组内容,然后再返回内部分组

#结果:[(‘a1a‘,‘a‘,‘1‘,‘a‘),(‘b2b‘,‘b‘,‘b‘),(‘c3c‘,‘c‘,‘3‘,‘c‘),(‘d4d‘,‘d‘,‘4‘,‘d‘)]
#整体返回一个元组,

#re.M 多行匹配

s=ab212cdnefghjj333inerege4343wefwnfff
print(re.findall(r[a-zA-Z]+$,s,re.M))
#结果:[‘cd‘,‘i‘,‘wefw‘,‘fff‘]

print(re.finditer(rd+,s))

for i in re.finditer(rd+,s):
    print(i.group())

#split

print(re.split(rd+,one12two34three5554446four78))

#切割出全部字母
s=a  2222   22  b  3344    c  544vv   44  d
print(re.split(r[ds]+,s))
#切割出全部数字
print(re.split(r[a-zA-Zs]+,s))
print(‘‘.join(re.split(r[a-zA-Zs]+,s)))

ss=re.split(r[a-zA-Zs]+,s)
print(list(filter(lambda x:x!=‘‘,ss)))

#可以控制切割次数
ss=re.split(r[a-zA-Zs]+,2)
print(list(filter(lambda x:x!=‘‘,ss)))

#替换re.sub

print(re.sub(rd+,**,one222two333three444four555))
#结果:one**two**three*

#替换空白字符、数字为‘‘
print(re.sub(r[ds]+,‘‘,onn   e22t    2twr o333tn   three444four555))
#结果:onetwothreefour

#替换掉所有标点符号
print(re.sub(r[^wds]+,avn,kje,ww))
#结果:avnkjeww

#可以指定替换次数
print(re.sub(r[^wds]+,ww,1))
#结果:avnkje,ww

#通过sub,交换分组的字符串的位置
p=re.compile(r(w+) (w+))

s=i say,hello world!!
print(p.search(s).group())
#结果:i say

print(p.findall(s))
#结果:[(‘i‘,‘say‘),(‘hello‘,‘world‘)]

print(p.sub(r2 1,s))#通过sub交换两个单词的位置

def func(m):
    print(group1:,m.group(1))
    print(group2:,m.group(2))
    return m.group(1).title()+ +m.group(2)

print(p.sub(func,s))  #s的每一组匹配结果,传入到func处理

import math
def multiply(m):
    print(m)
    v=int(m.group(0))
    print(v:,v)
    #return str(v*2)
    return str(math.pi*(v**2))

result=re.sub(rd+,multiply,10 20 30 40 50)
print(type(result))
print(result)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读