Python入门学习笔记8:正则表达式与JSON 取中间值等
1 """ 2 正则表达式 3 JSON(XML) 4 5 正则表达式是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列相匹配 6 快速检索文本,实现一些替换文本的操作 7 8 1.检查一串数字是否是电话号码 9 2.检测一个字符串是否符合email 10 3.把一个文本里指定的单词替换为另外一个单词 11 """ 12 import re 13 a = 'C|C++|C#|Python|Javascript、Python' 14 print(a.index('Python') > -1) 15 print(a.index('Python')) 16 print('Python' in a) 17 r = re.findall('Python', a) 18 print(r) 19 #规则 20 if len(r) != 0: 21 print("字符串包含Python") 22 else: 23 print("No") 24 25 #正则表达式找到0到9的数字 'Python' 普通字符 '\d' 元字符 26 b = 'C1|C++2|C#3|Python4|Javascript' 27 r1 = re.findall('\d',b) # \d数字0到9 28 print(r1)#['1', '2', '3', '4'] 29 r2 = re.findall('\D',b) # \D非数字 30 print(r2)#['C', '|', 'C', '+', '+', '|', 'C', '#', '|', 'P', 'y', 't', 'h', 'o', 'n', '|', 'J', 'a', 'v', 'a', 's', 'c', 'r', 'i', 'p', 't'] 31 32 #字符集 a[^c-f]c a c中间不包含c-f的字符 33 s = 'abc,acc,adc,aec,afc,ahc' 34 r3 = re.findall('a[^c-f]c',s) 35 print(r3)#['abc', 'ahc'] 36 37 #概括字符集 38 # \d \D \w(单词字符) \W 39 # \s(空白字符) \S 40 # . 匹配除换行符\n之外其他所有字符 41 a = 'python111java&_ \n|678php' 42 r4 = re.findall('\s',a) # '\d'等价于'[0-9]' '\D'等价于'[^0-9]' '\w'等价于'[A-Za-z0-9_]' '\w'等价于'[^A-Za-z0-9_]' 43 print(r4) # [' ', '\n'] 44 45 #数量词 46 a = 'python 1111java678php' 47 r5 = re.findall('[a-z]{3,6}',a) # [a-z][a-z][a-z]等价于'[a-z]{3}' 48 print(r5) #['python', 'java', 'php'] 49 #贪婪与非贪婪 50 #默认贪婪 re.findall('[a-z]{3,6}',a) 51 #非贪婪 re.findall('[a-z]{3,6}?',a) 52 r6 = re.findall('[a-z]{3,6}?',a) 53 print(r6) #['pyt', 'hon', 'jav', 'php'] 54 # * 匹配0次或者无限多次 55 # + 匹配1次或者无限多次 56 # ? 匹配0次或者1次 57 a = 'pytho0python1pythonn2' 58 r7 = re.findall('python*',a) 59 print(r7)#['pytho', 'python', 'pythonn'] 60 r8 = re.findall('python+',a) 61 print(r8)#['python', 'pythonn'] 62 r9 = re.findall('python?',a) 63 print(r9)#['pytho', 'python', 'python'] 64 65 #边界匹配 66 qq = '1234567890' 67 # 位数4~8 完整匹配:'^\d{4,8}$' 68 r10 = re.findall('123$',qq) 69 print(r10)# 70 71 a = 'pythonpythonpython' 72 r11 = re.findall('(python){3}(JS)',a) 73 print(r11) 74 # []或关系 ()且关系 {}步长 75 76 #模式参数 77 language = 'CC++C#PythonC#Javascript' 78 r12 = re.findall('c#.{1}',language,re.I | re.S) # 模式参数 re.I 忽略大小写 79 print(r12) 80 #字符串替换 re.sub(选择要替换的字符串,替换成的字符串,字符串,替换次数) 81 #r13 = language.replace('C#','GO') 82 83 def convert(value): 84 matched = value.group() 85 return '!!'+matched+'!!' 86 #return 'GO' 87 88 r13 = re.sub('C#',convert,language) 89 print("r13:",r13) 90 91 s = 'A8C3721D86' 92 93 def convert1(value): 94 macthed = value.group()#从对象中提取对应的字符串 95 if int(macthed) >= 6: 96 return '9' 97 else: 98 return '0' 99 100 r14 = re.sub('\d',convert1,s) 101 print("r14:",r14) 102 103 s = '88C3721D86' 104 r15 = re.match('\d',s)#从首字母开始匹配 105 print(r15) 106 r16 = re.search('\d',s)#搜索整个字符串 107 print(r16.group()) 108 r17 = re.findall('\d',s) 109 print(r17) 110 111 s = 'life is short,i use python,i love python' 112 r18 = re.search('life(.*)python',s) 113 print(r18.group(1)) 114 r19 = re.findall('life(.*)python',s) 115 print(r19) 116 r20 = re.search('life(.*)python(.*)python',s) 117 print(r20.group(0,1,2)) #('life is short,i use python,i love python', ' is short,i use ', ',i love ') 118 print(r20.groups()) #(' is short,i use ', ',i love ') 119 120 #JSON 是一种数据格式、是一种轻量级的数据'交换格式' 121 #JSON特点(跨语言交换数据) 易于阅读、易于解析、网络传输效率高 122 123 124 import json 125 #json字符串 str转json 126 json_str = '{"name":"xiaoming","age":18}' 127 student = json.loads(json_str) 128 print(type(student)) 129 print(student) 130 print(student['name'],student['age']) 131 #json数组 132 json_array = '[{"name":"xiaoming","age":18,"flag":false},{"name":"xiaoming","age":18}]' 133 students = json.loads(json_array) 134 print(type(students)) 135 print(students) 136 137 """ 138 json python 139 object dict 140 array list 141 string str 142 number int 143 number float 144 true True 145 false False 146 null None 147 """ 148 149 #json json数组转str 150 student = [ 151 {'name':'xiaoming','age':18,'flag':False}, 152 {'name':'xiaoming','age':18} 153 ] 154 json_str = json.dumps(student) 155 print(type(json_str)) 156 print(json_str) 157 #NOSQL MongoDB存储序列化对象 158 159 name = 'buy4H' 160 rule = r'buy(.*?)H' 161 #print str1[:str1.index(str2)] #获取 "."之前的字符(不包含点) 结果 Hello 162 #print str1[str1.index(str2):] ; #获取 "."之后的字符(包含点) 结果.python 163 print("取H之前的字符" + name[:name.index('H')]) 164 print("取buy之后的字符" + name[name.index('y'):]) 165 text = re.findall(name, rule) 166 print("取中间文本:" + str(text)) 167 168 169 #截取中间值: 170 # 本文实例讲述了python根据开头和结尾字符串获取中间字符串的方法。分享给大家供大家参考。具体分析如下: 171 # 这里给定一个字符串,指定开头和结尾的字符串,返回中间包夹的字符串,比如: 172 # content:<div class="a">jb51.net</div> 173 # startStr:<div class="a"> 174 # endStr:</div> 175 # 返回结果:jb51.net 176 def GetMiddleStr(content,startStr,endStr): 177 startIndex = content.index(startStr) 178 if startIndex>=0: 179 startIndex += len(startStr) 180 endIndex = content.index(endStr) 181 return content[startIndex:endIndex] 182 if __name__=='__main__': 183 print(GetMiddleStr('<div class="a">jb51.net</div>','<div class="a">','</div>')) 184 print(GetMiddleStr(name,'buy','H'))