博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python3.5里的正则表达式
阅读量:6209 次
发布时间:2019-06-21

本文共 1791 字,大约阅读时间需要 5 分钟。

正则表达式其实内容不多,这是python一个比较人性化的地方,虽然有".","*","?",但是他们单独使用的机会很少,主要的使用是捏合在一起:(.*?)

首先要启动正则表达式,需要先import re。这样才能启动re下面的内部程序。

(.*?)是一个完全精确的算法,她不像“.*”那样贪心,甚至比“.*?”还不贪心。(.*?)使用的格式如下:

re.findall("定位符1(.*?)定位符2",需要检查的字段)

然后就会显示出()内的内容。

for instance:

1
2
3
4
    
import 
re
    
s
=
"sdfxxhelloxxfsdfxxworldxxasdf"
    
d
=
re.findall(
"xx(.*?)xx"
,s)
    
print
(d)

以上的程序显示结果是['hello', 'world'],注意,这是一个列表!即d是可以查序的,d[0]='hello'。

如果s改变一下变成以下的方式:

1
2
3
4
5
    
import 
re
    
s
=
"""sdfxxhello
        
xxfsdfxxworldxxasdf"""
    
d
=
re.findall(
"xx(.*?)xx"
,s)
    
print
(d)

这样的输出结果是["fsdf"],而不是上一个结果。这是因为“.在默认的情况下不可以匹配转行符/n”。s现在是两段话,那么re.findall会先找第一段,如果在第一段找到了符合要求的会输出,如果没有找到,那么开始在第二段找,但是找归找,却是不继承第一段的内容。所以满足xx~xx之间要求的只有xxfsdfxx这一段,故而输出["fsdf"]。虽然紧跟着后面还有一个xxworldxx,但是由于前面的xx已经被上一段用走了,所以无法再选择了。

如果d=re.findall("xx(.*?)xx",s,re.S),这样的话输出是['hello\n', 'world']。re.S的意思是re模块里的S命令。

连用(.*?):

  

1
2
3
4
  
import 
re
    
s
=
"89A000Boo2junkiA111Boooo2nium"
    
d
=
re.findall(
"A(.*?)B(.*?)2"
,s)
    
print
(d)

这样的输出结果是[('000', 'oo'), ('111', 'oooo')],d[0]=('000', 'oo'),len(d)=2。

匹配纯数字:

1
2
3
4
    
import 
re
    
s
=
"asdf12345hjkl"
    
f
=
re.findall(
"(\d+)"
,s)
    
print
(f)

此时的输出结果是12345,f=re.findall("(\d+)",s)的效果等于f=re.findall("asdf(.*?)hjkl",s)。但是要注意(\d+)只能返回纯数字,如果s="asdf12a34w5hjkl"的话,那么再用这条语句,返回的是["12","34","5"]。

search命令

  

1
2
3
4
  
import 
re
    
s
=
"asdfxxIxx231xxLOVExxDFd"
    
f
=
re.search(
"xx(.*?)xx213xx(.*?)xx"
,s).group(
1
)
    
print
(f)

此时的结果是I,若后面改成group(2),那么输出结果是LOVE。可见后面的group号码是对应里面的(.*?)的值,而一旦group号码超出了(.*?)的个数,那么就会红字报错,Index Error.而如果不加group,那么会提示<_sre.SRE_Match object; span=(4, 20), match='xxIxx123xxLOVExx'>。

sub命令

1
2
3
4
    
import 
re
    
s
=
"123RRRRR123"
    
f
=
re.sub("
123
(.
*
?)
123
”,“
12345
”,s)
    
print
(f)

此时输出的结果是12345,可见如果有满足语句选择的量,那么会直接返回sub语句后面的内容。如果没有满足语句选择的量,那么返回的是s。sub主要是一个替换的作用,而无法替换的时候,就将原值返回。

 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1729132

转载地址:http://zfkja.baihongyu.com/

你可能感兴趣的文章
GitLab 11.9 正式发布,自动化工具 ChatOps 已开源
查看>>
交换机的基本原理配置(一)
查看>>
android baidupush
查看>>
Lottie 站在巨人的肩膀上实现 Android 酷炫动画效果
查看>>
“陪护机器人”研报:距离真正“陪护”还差那么一点
查看>>
深入框架本源系列 —— Virtual Dom
查看>>
您有一个上云锦囊尚未领取!
查看>>
Java Web的web.xml文件作用及基本配置(转)
查看>>
马约拉纳费米子:推动量子计算的“天使粒子”
查看>>
使用ActionTrail Python SDK
查看>>
数据显示,中国近一半的独角兽企业由“BATJ”四巨头投资
查看>>
log日志轮转--logrotate
查看>>
安装输入发
查看>>
用户配置相关文件
查看>>
kvm vnc的使用,鼠标漂移等
查看>>
linux中fcntl()、lockf、flock的区别
查看>>
gitlab 2.7版本升级到2.8
查看>>
获取Extjs文本域中的内容
查看>>
对‘初学者应该选择哪种编程语言’的回答——计算机达人成长之路(38)
查看>>
Redis-3.2主从复制与集群搭建 推荐
查看>>