python正则表达式匹配任意字符,python正则表达式匹配特定字符串
仅供学习,转载请注明出处。
正则表达式概述
想
场景:胖老板在写字板上写了很多东西。判断是否有冒烟的说法。如果判断正确,可以得到一包烟。内容如下:jkashdjkahskjhaksjhdsmokejasdjashdjhasd这一串东西肉眼看起来很简单。中间有一个。
然后胖老板不算,继续给升级版,如下:
ajsdlkasjdlkjasdlkujqoiuioujasldkasjlkdas dljkhalaksj;dla,msdmnaslkdkasmdklamsx,asjdklsomkeaskldjkalsjdklasmd,mxznjhsaiodoiwuasdjhkljasmnxnlkjsxhjalsdkjlasbldkjnasdjnajsldnajlskdsmokeasjdlka;sjdlkjasdLkjasd问,这里有多少烟?
真是无情。
那么有没有解决这个问题的好办法呢?
答案是使用正则表达式进行匹配查询。
所以我们先补充一下正则表达式的内容。
Re模块操作
在Python中,当需要通过正则表达式匹配字符串时,可以使用名为re的模块。
的基本用法如下:
#编码=utf-8
#导入re模块
进口re
#使用match方法进行匹配。
Result=re.match(正则表达式,要匹配的字符串)
#如果上一步匹配数据,可以使用分组方法提取数据。
result.group()
好了,基本方法我知道了。
这里有一个简单的测试来使用它。
在[1]:导入re
In [2]: result=re.match(smoke , ajksdhjkashdsmokeasjdljkasjd )
In [3]: result.group()
-
AttributeError Traceback(最近一次调用)
模块中的ipython-input-3-c8eb6f1e4981
- 1个结果组()
attribute error:“NoneType”对象没有属性“group”
在[4]中:
In [4]: result=re.match(smoke , smokeaskdljalksdj )
In [5]: result.group()
Out[5]:“烟”
在[6]中:简单的可以看出,re模块的这种匹配方法只能匹配到烟开头的内容,否则匹配不到。
如果胖老板有点鬼,不把烟放在最前面,就找不到了。
看来还需要再加点技能点。
匹配单个字符
正则表达式想要找到对应的字符,需要按字符或类型逐一匹配,所以当然有对应的匹配字符。
正则表达式的单字符匹配:
性格;角色;字母
功能。
匹配任何1个字符(除了\n)
[ ]
匹配[]中列出的字符
\d
匹配数字,即0-9
\D
匹配非数字,即不是数字。
\s
匹配,即空格、tab键
\S
匹配非空白
\w
匹配单词字符,即a-z、A-Z、0-9、_
\W
匹配非单词字符
用上面这些字符来搭配不同的字符组合,先一个一个来测试吧。
使用。匹配[7]中的任何1个字符(除\ n以外):result=re.match (r . , smokeaskdljalksdj )
In [8]: result.group()
Out[8]: s
在[9]中:result=re.match(r . , asdasdsmokeaskdljalksdj )
In [10]: result.group()
Out[10]: a
在[11]中:
在[11]中:result=re.match(r . ,!asdadsmokeaskdljalksdj’)
在[12]中:result.group()
Out[12]:!
在[13]中:result=re.match(r . ,/asdadsmokeaskdljalksdj )
在[14]中:result.group()
Out[14]: /
在[15]中:result=re.match(r . , 1asdasdsmokeaskdljalksdj )
In [16]: result.group()
out[16]:“1”
在[17]中:result=re.match(r . , \n1asdasdsmokeaskdljalksdj )
In [18]: result.group()
-
AttributeError Traceback(最近一次调用)
模块中的ipython-input-18-c8eb6f1e4981
- 1个结果组()
attribute error:“NoneType”对象没有属性“group”
在[19]中:从结果来看,可以任意匹配所有字符串(除了换行符\n)
匹配[]中列出的字符
导入re模块
在[1]:导入re
如果hello的第一个字符是小写的,正则表达式需要小写的h。
In [2]: ret=re.match(h ,你好Python )
In [3]: print(ret.group())
h
#如果匹配错误,将会报告一个错误。
In [4]: ret=re.match(H ,你好Python )
In [5]: print(ret.group())
-
属性错误回溯(最近一次调用)
模块中的ipython-input-5-78af6c16457f
- 1个打印(ret.group())
属性错误:“NoneType”对象没有属性"组"
在[6]中:
如果你好的首字符大写,那么正则表达式需要大写的H
In [6]: ret=re.match(H ,你好python’)
In [7]: print(ret.group())
H
在[8]中:
大小写h都可以的情况
In [8]: ret=re.match([hH],你好python’)
In [9]: print(ret.group())
H
In [10]: ret=re.match([hH],你好python’)
In [11]: print(ret.group())
h
在[12]中:ret=re。匹配([hH]ello Python ,你好Python )
In [13]: print(ret.group())
你好计算机编程语言
在[14]中:ret=re。匹配([hH]ello Python ,你好Python )
In [15]: print(ret.group())
你好计算机编程语言
在[16]中:ret=re。匹配([Hh]ello Python ,你好Python )
In [17]: print(ret.group())
你好计算机编程语言
在[18]中:
匹配0到9第一种写法
# 增加匹配数字七
在[18]中:ret=re。match( 7[Hh]ello Python , 7Hello Python )
In [19]: print(ret.group())
七你好计算机编程语言
在[20]中:
# 如果匹配数字8会不会报错?
在[20]中:ret=re。match( 7[Hh]ello Python , 8Hello Python )
In [21]: print(ret.group()) #淡定报错
-
属性错误回溯(最近一次调用)
模块中的ipython-input-21-78af6c16457f
- 1个打印(ret.group())
属性错误:“NoneType”对象没有属性"组"
# 那么如何能够同时匹配数字七和8呢?只要用[] 括号起来就可以的了。
在[22]中:ret=re。match([78][Hh]ello Python , 8Hello Python )
In [23]: print(ret.group())
8你好计算机编程语言
# 那么如果想要匹配0 - 9 所有数字呢?可以如下:
在[24]中:ret=re。match([0123456789][Hh]ello Python , 8Hello Python )
In [25]: print(ret.group())
8你好计算机编程语言
在[26]中:ret=re。match([0123456789][Hh]ello Python , 1Hello Python )
In [27]: print(ret.group())
一你好计算机编程语言
# 不过不要误会可以匹配多个字符,是无法匹配123 的
在[28]中:ret=re。match([0123456789][Hh]ello Python , 123Hello Python )
In [29]: print(ret.group()) #不负众望,淡定报错
-
属性错误回溯(最近一次调用)
模块中的ipython-input-29-78af6c16457f
- 1个打印(ret.group())
属性错误:“NoneType”对象没有属性"组"
在[30]中:
匹配0到9第二种写法
# 刚才使用[0123456789]的写法真是费劲,那么下面使用[0-9]就可以简单写好
在[30]中:ret=re。match([0-9][Hh]ello Python , 8Hello Python )
In [31]: print(ret.group())
8你好计算机编程语言
在[32]中:
# 那么如果想要剔除数字七呢?只要中断开来即可。
在[32]中:ret=re。match([0-68-9][Hh]ello Python , 8Hello Python )
In [33]: print(ret.group())
8你好计算机编程语言
在[34]中:ret=re。match([0-68-9][Hh]ello Python , 0你好Python )
In [35]: print(ret.group())
0你好计算机编程语言
在[36]中:ret=re。match([0-68-9][Hh]ello Python , 1Hello Python )
In [37]: print(ret.group())
一你好计算机编程语言
# 匹配数字七的时候,淡定报错
在[38]中:ret=re。match([0-68-9][Hh]ello Python , 7Hello Python )
In [39]: print(ret.group())
-
属性错误回溯(最近一次调用)
模块中的ipython-input-39-78af6c16457f
- 1个打印(ret.group())
属性错误:“NoneType”对象没有属性"组"
在[40]:匹配数字,即0-9:\d上面示例使用[0-9]的方式来匹配数字,虽然是可以,但是有时候懒得写,就可以直接用\d来简单写写即可。
一个字,省事呀。
## 使用两个\d来匹配两个数字
在[42]中:ret=re.match(蓝利群一包\d\d元,蓝利群一包17元)
In [43]: print(ret.group())
蓝利群一包17元
在[44]中:
## 使用一个\d来匹配一个数字
在[44]中:ret=re.match(包子\d元,包子2元)
In [45]: print(ret.group())
包子2元
在[46]中:ret=re.match(包子\d元,包子0元)
In [47]: print(ret.group())
包子0元
# 测试\d能否匹配英文字母a
在[48]中:ret=re.match(包子\d元,包子a元)
In [49]: print(ret.group()) #淡定报错
-
属性错误回溯(最近一次调用)
模块中的ipython-输入-49-78af6c16457f
- 1个打印(ret.group())
属性错误:“NoneType”对象没有属性"组"
在[50]:匹配非数字,即不是数字:\D简单来说大写D就是小写d的匹配取反,既然小写d可以匹配0-9,然后大写D肯定就不行啦。
In [50]: ret=re.match(包子\D元,包子a元)
In [51]: print(ret.group())
包子a元
在[52]中:ret=re.match(包子\D元,包子一元)
In [53]: print(ret.group())
-
属性错误回溯(最近一次调用)
模块中的ipython-input-53-78af6c16457f
- 1个打印(ret.group())
属性错误:“NoneType”对象没有属性"组"
在[54]中:匹配空白,即空格,选项卡键:\s#直接输入一个空格来匹配
In [56]: ret=re.match(包子\d元,包子一元)
在[57]中:
In [57]: print(ret.group()) #淡定正常
包子一元
在[58]中:
# 那么如果输入多个空格,是否能够自动匹配呢?
In [58]: ret=re.match(包子\d元,包子一元)
In [59]: print(ret.group()) #无情报错
-
属性错误回溯(最近一次调用)
模块中的ipython-input-59-78af6c16457f
- 1个打印(ret.group())
属性错误:“NoneType”对象没有属性"组"
# 那么使用\s能够自动匹配多个空格呢?
In [60]: ret=re.match(包子\d\s元,包子一元)
In [61]: print(ret.group()) #淡定不行
-
属性错误回溯(最近一次调用)
模块中的ipython-input-61-78af6c16457f
- 1个打印(ret.group())
属性错误:“NoneType”对象没有属性"组"
# 淡定增加一个号,用来多个字符匹配,意思就是号前面的\s多个进行匹配。
In [62]: ret=re.match(包子\d\s元,包子一元)
In [63]: print(ret.group()) #淡定成功
包子一元
在[64]中:匹配非空白:\S##使用两个大写S来匹配包子二字
In [64]: ret=re.match(\S\S\d\s元,包子一元)
In [65]: print(ret.group()) #淡定匹配,那么是不是换行符也可以匹配呢?
包子一元
# 匹配一下换行符\n试试
In [66]: ret=re.match(\S\S\d\s元, \n子一元)
In [67]: print(ret.group()) #其实换行符是空的,而\S是匹配非空,那么当然就报错了。
-
属性错误回溯(最近一次调用)
模块中的ipython-input-67-78af6c16457f
- 1个打印(ret.group())
属性错误:“NoneType”对象没有属性"组"
# 测试匹配一下特殊字符看看
In [68]: ret=re.match(\S\S\d\s元,@子一元)
In [69]: print(ret.group())
@子一元
在[70]:
In [70]: ret=re.match(\S\S\d\s元,!@1 元)
In [71]: print(ret.group())
!@1 元
在[72]中:匹配单词字符,即a-z、A-Z、0-9 、_ :\w
简单一看这个\w就是等价于[0-9a-zA-z_],下面可以测试一下
# 首先测试一下\w来匹配数字、大小写字母,以及下划线
In [78]: re.match(\S\S\d\s \w元,!@1 a元).群组()
out[78]:’!@1 a元
In [79]: re.match(\S\S\d\s \w元,!@1 A元).群组()
out[79]:’!@1 A元
In [80]: re.match(\S\S\d\s \w元,!@1 1元).群组()
Out[80]:!@1 1元
In [81]: re.match(\S\S\d\s \w元,!@1 _元).群组()
Out[81]:!@1 _元
在[82]中:
# 再用等价的[0-9a-zA-Z_]进行匹配测试
在[82]中:关于match( \ S \ S \ d \ S[0-9a-zA-Z _]元,!@1 1元).群组()
out[82]:’!@1 1元
在[83]:re。match( \ S \ S \ d \ S[0-9a-zA-Z _]元,!@1 9元).群组()
out[83]:’!@1 9元
in[84]:re . match( \ s \ s \ d \ s[0-9a-za-z _]元,!@ 1元’)。群组()
out[84]:’!@1块钱
in[85]:re . match( \ s \ s \ d \ s[0-9a-za-z _]元,!@1 B元’)。群组()
out[85]:’!@1 B元
in[86]:re . match( \ s \ s \ d \ s[0-9a-za-z _]元,!@ 1 _ yuan’)。群组()
out[86]:’!@1 _元
#测试\w是否能匹配特殊字符感叹号。
In [87]: re.match(\S\S\d\s \w元,!@1 !袁)。群组()
-
AttributeError Traceback(最近一次调用)
模块中的ipython-input-87-197a2dcee198
-1环。匹配( \ s \ s \ d \ s \ w元,!@1 !袁)。群组()
attribute error:“NoneType”对象没有属性“group”
in[88]:re . match( \ s \ s \ d \ s[0-9a-za-z _]元,!@1 !袁)。群组()
-
AttributeError Traceback(最近一次调用)
模块中的ipython-input-88-d6524879a9cc
-1环。匹配( \ s \ s \ d \ s [0-9a-za-z _]元,!@1 !袁)。群组()
attribute error:“NoneType”对象没有属性“group”
在[89]:匹配非单词字符:\W简单来说,大写W就是反小写W的范围,那我们来试试。
#冷静匹配感叹号,这个小写W是无法匹配的。
In [89]: re.match(\S\S\d\s \W元,!@1 !袁)。群组()
out[89]:’!@1 !元
#再次测试匹配号码,冷静报错。
In [90]: re.match(\S\S\d\s \W元,!@1 1元’)。群组()
-
AttributeError Traceback(最近一次调用)
模块中的ipython-input-90-bd6e937cb2ef
-1环。匹配( \ s \ s \ d \ s \ w元,!@1 1元’)。群组()
attribute error:“NoneType”对象没有属性“group”
#静下心来匹配换行符。你真的可以做到。
In [91]: re.match(\S\S\d\s \W元,!@1 \n元)。群组()
Out[91]:!@1 \n元
在[92]:但是有匹配单个字符的技能,还不足以在多个字符中找烟。
在下一章,我们将继续讨论多个字符的匹配规则。
关注微信微信官方账号,回复【数据】,Python,PHP,JAVA,web,即可获取Python,PHP,JAVA,前端等视频数据。
来自海洋的渔夫原创作品,
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。