知行编程网知行编程网  2022-01-04 18:09 知行编程网 隐藏边栏 |   抢沙发  4 
文章评分 0 次,平均分 0.0

re模块

Python自带了匹配字符串的模块re,我们可以通过该模块对字符串进行(模糊)匹配,提取出我们需要的内容。

re模块中很多功能都是基于正则表达式实现的。正则表达式是一种特殊的字符序列,它能帮助我们去检查字符串是否与某种模式相匹配

常用方法

1、re.compile(pattern, flags=0)

将正则表达式编译成正则对象,搭配match、search、findall等等进行匹配。

  1. import re
  2.  
  3. prog = re.compile('[abc]') # 匹配字符集abc与字符串匹配的第一个字符。
  4. print(prog.search('abcd').group()) # a

2、re.match(pattern, string, flags=0)

从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

  1. import re
  2.  
  3. # w 用来匹配单次字符 包括a-z A-Z 0-9 _
  4. r = re.match('hw+', 'how are you')
  5. # 获取匹配到的结果
  6. print(r.group()) # how
  7. r = re.match('h(w+)', 'how are you')
  8. # groups 获取模型中匹配到的结果,返回匹配到的字符串的分组部分
  9. print(r.groups()) # ('ow',)
  10.  
  11. # 引用别名word1、word2,它们相当于key,value就是匹配到的内容。
  12. r = re.match('(?P<word1>h)(?P<word2>w+)', 'how are you')
  13. print(r.group()) # how
  14. print(r.groups()) # ('h', 'ow')
  15. print(r.groupdict()) # {'word1': 'h', 'word2': 'ow'}

3、re.search(pattern, string, flags=0)

扫描整个字符串,返回第一个成功的匹配,如果匹配失败,返回None。

  1. import re
  2.  
  3. # w 用来匹配单次字符 包括a-z A-Z 0-9 _
  4. r = re.search('aw+', 'how are you')
  5. # 获取匹配到的结果
  6. print(r.group()) # are
  7. r = re.search('a(w+)', 'how are you')
  8. # groups 获取模型中匹配到的结果,返回匹配到的字符串的分组部分
  9. print(r.groups()) # ('re',)
  10.  
  11. # 引用别名word1、word2,它们相当于key,value就是匹配到的内容。
  12. r = re.search('(?P<word1>a)(?P<word2>w+)', 'how are you')
  13. print(r.group()) # are
  14. print(r.groups()) # ('a', 're')
  15. print(r.groupdict()) # {'word1': 'a', 'word2': 're'}

4、re.findall(pattern, string, flags=0)

以string列表形式返回string中pattern的所有非重叠匹配项。从左到右扫描该字符串,并以找到的顺序返回匹配项。如果该模式中存在一个或多个组,则返回一个组列表;否则,返回一个列表。如果模式包含多个组,则这将是一个元组列表。空匹配项包含在结果中。

  1. import re
  2.  
  3. # 匹配包含所有带有o的单次
  4. r= re.findall('wow+', 'how are you')
  5. print(r) # ['how', 'you']
  6.  
  7. # * 前的字符可以是0个或者多个。返回list
  8. r = re.findall('好*', '你好吗?我很好。你好才是真的好。你好好了')
  9. print(r) # ['', '好', '', '', '', '', '好', '', '', '好', '', '', '', '', '好', '', '', '好好', '', '']
  10. r = re.findall('你好*', '你好吗?我很好。你好才是真的好。你好好了')
  11. print(r) # ['你好', '你好', '你好好']
  12.  
  13. # + 用于匹配字符一次或者多次
  14. r = re.findall('好+', '你好吗?我很好。你好才是真的好。你好好了')
  15. print(r) # ['好', '好', '好', '好', '好好']
  16. r = re.findall('你好+', '你好吗?我很好。你好才是真的好。你好好了')
  17. print(r) # ['你好', '你好', '你好好']
  18.  
  19. # $ 用来匹配结尾
  20. r = re.findall('测试$', '测试小姐姐还没对象')
  21. print(r) # []
  22. r = re.findall('测试$', '小姐姐我的代码还没测试')
  23. print(r) # ['测试']
  24.  
  25. # ^ 用来匹配开始
  26. r = re.findall('^小姐姐', '小姐姐我的代码还没测试')
  27. print(r) # ['小姐姐']
  28.  
  29. # ^ 用于字符集中表示取反
  30. # 匹配所有除字母外的字符
  31. r = re.findall('[^a-z]', '123abcde789')
  32. print(r) # ['1', '2', '3', '7', '8', '9']

5、re.split(pattern, string, maxsplit=0, flags=0)

split能够按照所能匹配的字串将字符串进行切分,返回切分后的字符串列表

  1. import re
  2.  
  3. # 按照;或者, 对字符串进行分割
  4. r = re.split('[;,]', 'abc,qwer; opq, mn')
  5. print(r) # ['abc', 'qwer', ' opq', ' mn']

以上仅演示了部分正则的语法,更多正则语法 可以参考下表。

Python模块学习 ---- re正则表达式

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享