学习Python第十一天

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import re

# wp后面第二个字符如果p那就能匹配到
# a = re.findall('wp.p','fewiopoewpfpswp---wp')
# print(a)
# ^ 必须是开头位置相同 不然匹配不到
# a = re.findall('^wp','wpfewiopoewpfps---')
# print(a)
# $必须是结尾相同
# a = re.findall('wp$','wpfewiopoewpfps---wp')
# print(a)
# 只匹配*前面的字符相同 匹配0~多次
# a = re.findall('wp*','fewiopoewpfps---wpppppppp')
# print(a)
# 只匹配*前面的字符相同 匹配1~多次
# a = re.findall('wp+','fewiopoewpfps---wpppppppp')
# print(a)
# 只匹配*前面的字符相同 匹配0~1次
# a = re.findall('wp?','fewiopoewpfps---wpppppppp')
# print(a)
# 匹配wp后三到五位
# a = re.findall('wp{3,5}','fewiopoewpfps---wpppppppp')
# print(a)
# a后面跟一个w或者是p后面在跟一个d
# a = re.findall('e[wp]i','fewiopoewpfpswppp')
# print(a)
# 匹配所有小写字母
# a = re.findall('[a-z]','fewiopoewpfpswppp')
# print(a)
# [^xxx] 除了中括号里面的内容,其他都匹配(0不在数字的匹配范围之内)
# a = re.findall('[^1-9]','fewiopoewpfps3wppp80')
# print(a)
# ():组 值匹配组里面的内容
# a = re.findall('(wp)*','fewiop oewpfps3wppp80')
# print(a)

# :反斜杠后面跟元字符去除特殊功能
# 反斜杠后面跟普通字符实现特殊功能
# 引用序号对应的字组锁匹配的字符串
# a = re.search(r"(aaa)(bbb)ccc21","aaabbbcccbbbaaa").group() # 2相当于bbb
# print(a)

# d 匹配任何十禁止数;相当于类[0-9]
# D 匹配任何非数字字符;相当于类[^0-9]
# s 匹配任何空白字符;相当于类[ fv]
# S 匹配任何非空白字符 相当于类[^ fv]
# w 匹配任何字母数字字符;相当于类[a-zA-Z0-9_]
# w 匹配任何非字母数字字符;相当于类[^a-zA-Z0-9_]
#  匹配一个单词边界,也就是指单词和空格间的位置
#  就是用在你匹配整个单词的时候,如果不是整个单词就不匹配。
# 例:匹配 I 单词的话,很多单词里面都有I 但我指向匹配I(独立的单词)就用
# a = re.findall(r'abc','abc fdsfewrewabc')
# print(a)

# a = re.findall('[d]','fewiop oewpfps3wppp80')
# print(a)
# r"p(d+?)" 获取p后面的所有数字
# r"p(d+)“ 获取p后面的第一个数字
# a = re.findall(r"p(d+)",'fes3wppp8086787')
# print(a)
# search 包含w和之后的所有数字
# a = re.search(r"w(d+)",'fdsfew12321fds').group()
# print(a)
# 匹配w,f之间所有的数字,即便d+? (在这种情况下问号不起作用)
# a = re.search(r"w(d+?)f",'fdsfew12321fds').group()
# print(a)

# re.I 使匹配对大小写不敏感
# re.L 做本地化识别(locale-aware)匹配
# re.M 多行匹配,影响^和$
# re.S 是 . 匹配包括换行在内的所有字符
# a = re.search('com','COMADFS',re.I).group()
# print(a)
# a = re.findall('.','COMA dfs',re.S)
# print(a)

# group() 返回被re匹配的字符串
# start() 返回匹配开始的位置
# end() 返回匹配结束的位置
# span() 返回一个元祖包含匹配(开始,结束)的位置
# group(n.m) 返回组号为n,m所匹配的字符串,如果组好不存在

# a = '12312abc3210'
# b = re.search("([0-9]*)([a-z]*)([1-9]*)",a).group(1,2)
# print(b)
# re.sub('原来的内容(.为通配符但是只匹配一个字符)','要替换的内容','字符串',替换次数(如果写2)就值替换匹配合格的前两个)
# a = re.sub('g.t','have','i get a,i got b, i gat c',2)
# print(a)
# re.subn 会返回一个替换的次数
# a = re.subn('g.t','have','i get a,i got b, i gat c')
# print(a)



# p= re.compile(r'd+')
# w = p.finditer('11 fedsfe22 gfgr,10....,9')
# print(w)
# for match in w:
# print(match.group() , match.span())

# c = re.search(r"(([01]?d?d|2[0-4]d|25[0-5]).){3}([01]?d?d|2[0-4]d|25[0-5])", "192.168.1.1").group()
# [01]? 第一位可有可无 如果有不是0 就是1
# d? 第二位也是可有可无
# [01]?d?d 最大范围是0~199
# |2[0-4]d 或最大范围是200~249
# |25[0-5] 或最大范围是250~255
# . 点
# {3}重复三次
# print(c)


# 不会做
source = "1-2*((60-30+(-9-2-5-2*3-5/3-40*4/2-3/5+6*3)*(-9-2-5-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))"
a = re.search('([^()]*)', source).group()
b = re.search('d+.?d*([*/]|**|[+-])[-]?d+.?d*', a).group()
# c = re.search('d+.?d*',a).group()
# print(c)
# d+ 数字(最少有一次) .? 小数点可有可无 d*小数点后面的数字可有可无,
print(b)
print(a)
原文地址:https://www.cnblogs.com/tornados/p/7910038.html