python正则表达式匹配任意字符,python正则表达式匹配特定字符串

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: