day 17 re模块

RE模块

import re

对一个大篇幅的字符串,按照你的规则找出想要的字符串

# 单个字符匹配
import re
# \w 与 \W #字母数字下划线, 非
# print(re.findall('\w', '太白jx 12*() _')) # ['太', '白', 'j', 'x', '1', '2', '_']
# print(re.findall('\W', '太白jx 12*() _')) # [' ', '*', '(', ')', ' '] # \s 与\S space 非space
# print(re.findall('\s','太白barry*(_ \t \n')) # [' ', '\t', ' ', '\n']
# print(re.findall('\S','太白barry*(_ \t \n')) # ['太', '白', 'b', 'a', 'r', 'r', 'y', '*', '(', '_'] # \d 与 \D 数字 非数字
# print(re.findall('\d','1234567890 alex *(_')) # ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
# print(re.findall('\D','1234567890 alex *(_')) # [' ', 'a', 'l', 'e', 'x', ' ', '*', '(', '_'] # \A 与 ^ 行首
# print(re.findall('\Ahel','hello 太白金星 -_- 666')) # ['hel']
# print(re.findall('^hel','hello 太白金星 -_- 666')) # ['hel'] # \Z 与 $ 行尾
# print(re.findall('666\Z','hello 太白金星 *-_-* \n666')) # ['666']
# print(re.findall('666\Z','hello 太白金星 *-_-* \n666')) # []
# print(re.findall('666$','hello 太白金星 *-_-* \n666')) # ['666'] # \n 与 \t
# print(re.findall('\n','hello \n 太白金星 \t*-_-*\t \n666')) # ['\n', '\n']
# print(re.findall('\t','hello \n 太白金星 \t*-_-*\t \n666')) # ['\t', '\t']
重复匹配 : [. ? * + {m,n} .* .*?]
. 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
? 匹配0个或者1个左边的字符,非贪婪方式
* 匹配0个或者多个左边的字符
+ 匹配一个或者多个左边的字符
{m,n} 匹配n到m次由前面的正则表达式定义的片段,贪婪方式

.*   匹配任意字符任意个数,贪婪模式

.*? 匹配任意字符任意个数,非贪婪模式
.匹配任意字符
print(re.findall('a.b','babb'))
print(re.findall('a.b','abb a%b a1b aab a7b a+b a b a\nb'))
print(re.findall('a.b','abb a%b a1b aab a7b a+b a b a\nb',re.DOTALL))
print(re.findall('a.bb','abb abb aaab')) ? 匹配0个或者1个由左边字符定义的片段
print(re.findall('a?b','abbzab abb aab')) # [ab b ab ab b ab]
print(re.findall('a?b','ab')) # [ab] * 匹配0个或者多个左边字符表达式
print(re.findall('a*b','b ab aaaaaab abbbbbbb'))
['b', 'ab', 'aaaaaab', 'ab', 'b', 'b', 'b', 'b', 'b', 'b'] + 匹配1个或者多个左边字符表达式
print(re.findall('a+b','b ab aaaaaab abb')) # ['ab', 'aaaaaab', 'ab'] {m,n} 匹配m个至n个左边字符表达式
print(re.findall('a{1,3}b','aaab ab aab abbb aaz aabb')) .* 贪婪匹配 从头到尾.
print(re.findall('a.*b','aab ab aaaaab a!!!@#$bz')) # [aab aaaaab a!!!@#$b] # .*? 非贪婪匹配 从头到尾.
print(re.findall('a.*?b','aab ab aaaaab a!!!@#$bz')) #

[ ]

[]
print(re.findall('a[abc]b','aab abb acb'))
print(re.findall('a[0-9]b','a1b a2b a3b acb ayb'))
print(re.findall('a[a-z]b','a1b a2b a3b acb ayb adb'))
print(re.findall('a[A-Z]b','a1b a2b a3b aAb aDb aYb'))
print(re.findall('a[a-zA-Z]b','aab aAb aWb aqb a1b')) # 大小写字母
print(re.findall('a[A-z]b','aab aAb aWb aqb a1b'))
print(re.findall('a[0-9][0-9]b','a1b a2b a29b a56b a456b'))
print(re.findall('a[-+*/]b','a+b a-b a*b a/b a6b')) 单纯的想表示- 一定要放在最前面
() 制定一个规则,将满足规则的结果匹配出来
print(re.findall('.*?_sb','wusir_sb alex_sb 日天_sb'))    #['wusir_sb', ' alex_sb', ' 日天_sb']
print(re.findall('(.*?)_sb','wusir_sb alex_sb 日天_sb')) # ['wusir', ' alex', ' 日天']
print(re.findall('company|companies','Too many companies have gone bankrupt, and the next one is my company'))
print(re.findall('compan(?:y|ies)','Too many companies have gone bankrupt, and the next one is my company'))
search 只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。

print(re.search('alex','re alex alex 太白'))
# print(re.search('alex','re aaaelx 太白')) # 找不到,返回None
ret = re.search('alex','re alex alex 太白') # <_sre.SRE_Match object; span=(3, 7), match='alex'>
print(ret.group()) # alex
 match:行首,None,同search,不过在字符串开始处进行匹配,完全可以用search+^代替match
print(re.match('barry','barry fdlfjsadfkl ').group())   # 同样用group()取值
print(re.match('barry','qbarry fdlfjsadfkl '))
split 分割 可按照任意分割符进行分割   *****
s1 = 'wusir;太白,alex|日天!小虎'
print(re.split('[;,|!]',s1))
sub 替换
print(re.sub('barry', '太白金星', 'barry是最好的讲师,barry就是一个普通老师,请不要将barry当男神对待。',2)) # 2代表替换两个
# 太白金星是最好的讲师,太白金星就是一个普通老师,请不要将barry当男神对待
#  制定一个统一的规则

obj = re.compile('\d{2}')  # 制定一个统一的匹配规则
print(obj.findall('fdsafsda4312fdsdf324'))
print(obj.findall('123fksldjf3432fdsjlkf453')) # ['12', '34', '32', '45']

finditer 迭代器

ret = re.finditer('\d', 'ds3sy4784a')
print(ret)
print(next(ret).group()) #
print(next(ret).group()) #
print([i.group() for i in ret]) # ['7', '8', '4']

命名分组

s1 = '深圳电话:0755-546123546 深圳地址:广东..'
print(re.search('\d+-\d+',s1).group())
# 命名分组
# 分组基础上定规则 ?P<组名>
ret = re.search('(?P<quhao>\d+)-(?P<num>\d+)',s1)
print(ret.group('quhao'))
print(ret.group('num'))
 
 
 
 
 
 
上一篇:(整理)Sublime Text 3 安装、破解、安装Package Control、汉化、添加到右键菜单、代码格式化、禁止更新


下一篇:Android网络编程系列之Volley总结