Python拥有强大的标准库。从如今起,開始学习标准库中提供的一些经常使用功能。

首先看正則表達式(regular expression),它的主要功能是从字符串(string)中通过特定的模式(pattern),搜索想要找到的内容。

比如:要从一个字符串中找出全部的数字,我们能够这样做:

import re
str = "int2str"
m = re.search("[0-9]",str)
print(m.group(0))

输出:2

re.search()接收两个參数,第一个正則表達式。是匹配条件。

re.search()假设从第二个參数是目标字符串。

返回一个对象m,通过m.group()查看搜索到的结果;没有找到。则返回None。



经常使用函数:

m = re.search(pattern, string)搜索整个字符串,直到发现符合的子字符串。

m = re.match(pattern, string)从头開始检查字符串是否符合正則表達式。必须从字符串的第一个字符開始就相符。

对于返回的m, 我们使用m.group()来调用结果。

str = re.sub(pattern, replacement, string)在string中利用正则变换pattern进行搜索,对于搜索到的字符串,用还有一字符串replacement替换。

返回替换后的字符串str。



re.split()依据正則表達式切割字符串, 将切割后的全部子字符串放在一个表(list)中返回

re.findall()依据正則表達式搜索字符串。将全部符合的子字符串放在一给表(list)中返回





正則表達式:

1)单个字符:





.          随意一个字符





a|b        字符a或字符b





[afg]      a或者f或者g的一个字符





[0-4]      0-4范围内的一个字符





[a-f]      a-f范围内的一个字符





[^m]       不是m的一个字符





s         一个空格





S         一个非空格





d         [0-9]





D         [^0-9]





w         [0-9a-zA-Z]





W         [^0-9a-zA-Z]





2)反复





紧跟在单个字符之后,表示多个这样类似的字符





*         反复 >=0 次





+         反复 >=1 次





?         反复 0或者1 次





{m}       反复m次。比方说 a{4}相当于aaaa,再比方说[1-3]{2}相当于[1-3][1-3]





{m, n}    反复m到n次。

比方说a{2, 5}表示a反复2到5次。

小于m次的反复,或者大于n次的反复都不符合条件。

比如:

[0-9]{3,5}       9678





a?b              b





a+b              aaaaab





3) 位置





^         字符串的起始位置





$         字符串的结尾位置





比如:

正则表达 相符的字符串举例
不相符字符串





^ab.*c$ abeec
cabeec





4)返回控制





有可能对搜索的结果进行进一步精简信息。比方以下一个正則表達式:

output_(d{4})





该正則表達式用括号()包围了一个小的正則表達式。d{4}。 这个小的正則表達式被用于从结果中筛选想要的信息(在这里是四位数字)。

这样被括号圈起来的正則表達式的一部分。称为群(group)。

我们能够m.group(number)的方法来查询群。group(0)是整个正则表达的搜索结果,group(1)是第一个群……

import re
m = re.search("output_([0-9]{4})", "output_1986.txt")
print(m.group(0),m.group(1))

输出:

('output_1986', '1986')





我们还能够使用(?P<name>...)为group命名,以便更好地使用m.group查询:

import re
m = re.search("output_(?P<year>[0-9]{4})", "output_1986.txt")
print(m.group("year"))

输出:1986



坚持每天都能学一点新东西。好了。今天就先到这里了。

最新文章

  1. Bootstrap学习(1)
  2. ASP.NET MVC中实现多个按钮提交的几种方法
  3. ligerui ligerTip气泡提示信息
  4. jquery之 off()方法
  5. DecimalFormat--格式化十进制数字
  6. android sdk manager无法更新(2014-11-6测试OK)--自己收藏用
  7. poj2155 树状数组 Matrix
  8. [C++]VisualAssistX中文注释提示错误 解决办法
  9. NOI2008假面舞会
  10. pow(x,n) leecode
  11. opencv + numpy for python
  12. Shell终端收听音乐--网易云音乐命令行版
  13. 【学习】原生js学习笔记1:添加class和使input为不可用
  14. docker运行dubbo-admin
  15. Nginx的负载均衡 - 加权轮询 (Weighted Round Robin) 上篇
  16. JdbcTemplate中queryForObject方法返回空结果或不正确结果数量的解决方法
  17. 20172328 2018-2019《Java软件结构与数据结构》第六周学习总结
  18. 2018ccpc湖南邀请赛后记
  19. css清除浏览器默认样式
  20. linux 查看当前系统版本号

热门文章

  1. 正在创建模型,此时不可使用上下文“的解决办法。 正在创建模型,此时不可使用上下文。如果在 OnModelCreating 方法内使用上下文或如果多个线程同时访问同一上下文实例,可能引发此异常。请注意不
  2. 用Python表达对Android的想法
  3. [办公软件篇][2]source-insight安装
  4. Wannafly模拟赛2
  5. javascript学习笔记 - 引用类型 RegExp
  6. spring scope 属性的取值
  7. Jeddict研究过程中的总结
  8. log4net配置分析
  9. kb-07线段树-03--区间修改查询--lazy思想
  10. 使用grunt实现自动化单元测试