• day17


    一种手算开平方的方式:

    1. 从个位起向左每隔两位为一节,若带有小数从小数点起从向右每隔两位一节,用“,”讲各节分开
    2. 求不大于左边第一个数的平方根,为平方根最高位上的数
    3. 从左边第一节数里减去求得的最高位上的数的平方,在它们的差的右边写上第二节数作为第一个余数
    4. 把商的最高位上的数乘以20去试除第一个余数,所得的是整数作试商(如果这个最大整数大于等于10,就用9或8作试商)
    5. 用最高位的数乘以20加上试商再乘以试商,如果所得的积小于等于余数,这个试商就是平方根的第二位数;如果所得的积大于余数,就把试商逐次减小再试,直到积小于等于余数为止
    6. 用同样的方法继续求平方根的其他各位上的数

    手算开平方原理,以及为啥要乘以20:

    开方运算是根据二次项定理所推算出来的,因为(a+b)2=a2+2ab+b^2商数乘以20,就相当于2ab中的2

    re模块

    1、w W

    print(re.findall('w','ab 12+- _*&')) #w 匹配字母 数字 及下划线
    执行结果:['a', 'b', '1', '2', '_']
    print(re.findall('W','ab 12+- _*&')) #W 匹配非字母 数字 及下划线
    执行结果:[' ', '\', '+', '-', ' ', '*', '&']
    

    2、s  S

    print(re.findall('s','ab 12+- _*&')) #s 匹配任意空白字符,等价于[	
    
    f]
    执行结果:[' ', ' ']
    print(re.findall('S','ab 12+- _*&')) #S 匹配非空白字符
    执行结果:['a', 'b', '1', '2', '\', '+', '-', '_', '*', '&']
    

    3、d  D

    print(re.findall('d','ab 12+- _*&')) #d 匹配任意数字,等价于[0-9]
    执行结果:['1', '2']
    print(re.findall('D','ab 12+- _*&')) #D 匹配非数字
    执行结果:['a', 'b', ' ', '\', '+', '-', ' ', '_', '*', '&']
    

    综合:

    print(re.findall('w_sb','egon alex_sb12332wxx_sb,lxx_sb'))
    执行结果:['x_sb', 'x_sb', 'x_sb']
    

    4、A 基本上不用

    print(re.findall('Aalex','alex isalex sb'))#从头开始匹配只匹配第一个alex
    执行结果:['alex']
    print(re.findall('alex','alex isalex sb'))
    执行结果:['alex', 'alex']
    

    5、^

    print(re.findall('^alex','alex is salexb'))#从头开始匹配,匹配到第一个则不往后匹配
    执行结果:['alex']
    print(re.findall('sb','alexsb is sbalexsb'))#从头开始匹配,匹配所有
    执行结果:['sb', 'sb', 'sb']
    print(re.findall('^sb','alexsb is sbalexsb'))#从头开始匹配,第一个没有则不往后面匹配
    执行结果:[]
    

    6、  $

    print(re.findall('sb','alexsb is sbalexsb'))#从尾部开始匹配,匹配到则不往前匹配
    执行结果:['sb']
    print(re.findall('sb$','alexsb is sbalexsb'))#从尾部开始匹配,匹配到则不往前匹配
    执行结果:['sb']
    

    综合:

    print(re.findall('^ebn$','ebn'))#从头开始找,正反找都是ebn,都可以匹配上
    执行结果:['ebn']
    

    7、      (同理)

    print(re.findall('
    ','a
    c a	c al
    c'))#匹配到
    
    执行结果:['
    ', '
    ']
    print(re.findall('a
    c','a
    c a	c al
    c'))#匹配到['a
    c']
    执行结果:['a
    c']
    

    重复匹配:  .  ?    +  {m,n}  .  .*?

    1、.  :代表除了换行符外的任意一个字符

    print(re.findall('a.c','abc alc aAsc aaaaaac'))#匹配以a开头以c结尾.代表中间的任意一个字符
    执行结果:['abc', 'alc', 'aac']
    print(re.findall('a.c','abc alc aAc aaaaaa
    c'))#ac中间有换行符
    所以匹配不到a
    c
    执行结果:['abc', 'alc', 'aAc']
    print(re.findall('a.c','abc alc aAsc aaaaaa
    c',re.DOTALL))#.能匹配ac中间的所有一个字符,包括
    
    执行结果:['abc', 'alc', 'a
    c']
    

    2、?  :代表左边那一个字符重复0次或1次

    print(re.findall('ab?','a ab abb abbb abbbb abbbbb albbbbb'))#从头匹配ab中,b是零个或一个
    执行结果:['a', 'ab', 'ab', 'ab', 'ab', 'ab', 'a']
    

    3、*  :代表左边那一个字符出现0次或无穷次

    print(re.findall('ab*','a ab abb abbb abbbb abbbbb albbbbbbb'))#从头匹配ab中,b是零个或无穷个
    执行结果:['a', 'ab', 'abb', 'abbb', 'abbbb', 'abbbbb', 'a']
    

    4、+  :代表左边那一个字符出现至少一次或无穷次

    print(re.findall('ab+','a ab abb abbb abbbb abbbbb albbbbbbb'))#从头匹配ab中,b是一个或无穷个
    执行结果:['ab', 'abb', 'abbb', 'abbbb', 'abbbbb']
    

    5、{m,n}  :代表左边那一个字符出现m次到n次

    print(re.findall('ab?','a ab abb abbb abbbb abbbbb  albbbbbb'))
    print(re.findall('ab{0,1}','a ab abb abbb abbbb abbbbb albbbbbb'))
    执行结果:['a', 'ab', 'ab', 'ab', 'ab', 'ab', 'a'] , ['a', 'ab', 'ab', 'ab', 'ab', 'ab', 'a']
    print(re.findall('ab*','a ab abb abbb abbbb abbbbb albbbbbbb'))
    print(re.findall('ab{0,}','a ab abb abbb abbbb abbbbb albbbbbbb'))
    执行结果:['a', 'ab', 'abb', 'abbb', 'abbbb', 'abbbbb', 'a'] , ['a', 'ab', 'abb', 'abbb', 'abbbb', 'abbbbb', 'a']
    print(re.findall('ab+','a ab abb abbb abbbb abbbbb albbbbbbb'))
    print(re.findall('ab{1,}','a ab abb abbb abbbb abbbbb albbbbbbb'))
    执行结果:['ab', 'abb', 'abbb', 'abbbb', 'abbbbb'] , ['ab', 'abb', 'abbb', 'abbbb', 'abbbbb']
    print(re.findall('ab{1,3}','a ab abb abbb abbbb abbbbb albbbbbbb'))
    执行结果:['ab', 'abb', 'abbb', 'abbb', 'abbb']
    

    6、.*  :匹配任意长度,任意的字符=====》贪婪匹配

    print(re.findall('a.*c','ac a123c  aaaac a * 123) ()c asdfsdfkjdls'))#尽可能长的匹配
    执行结果:['ac a123c  aaaac a * 123) ()c']
    

    7、.*?  :非贪婪匹配

    print(re.findall('a.*?c','a123c456c'))#尽可能短的匹配
    执行结果:['a123c']
    

    8、()  :分组

    print(re.findall('(alex)_sb','alex_sb sfksdfksdalex_sb'))#在匹配到的情况下只留括号内的内容
    执行结果:['alex', 'alex']
    

    例子:非贪婪匹配到网址

    print(re.findall('href="(.*?)"','<li><a id="blog_nav_sitehome" class="menu" href="https://www.cnblogs.com/happyfei/">博客园</a></li>'))
    执行结果:['https://www.cnblogs.com/happyfei/']
    

    9、[]  :匹配一个指定范围内的字符(这一字符来自于括号内定义的)

    print(re.findall('a[0-9]c','a1c a+c a2c a9c a*c a11c a-c acc aAc '))#-号在[]内有特殊意义,如果要匹配带-号的,-号要放在最前面或最后面
    执行结果:['a1c', 'a2c', 'a9c']
    print(re.findall('a[-+*]c','a1c a+c a2c a9c a*c a11c a-c acc aAc '))
    执行结果:['a+c', 'a*c', 'a-c']
    print(re.findall('a[a-zA-Z]c','a1c a+c a2c a9c a*c a11c a-c acc aAc '))
    执行结果:['acc', 'aAc']
    print(re.findall('a[^a-zA-Z]c','a c a1c a+c a2c a9c a*c a11c a-c acc aAc '))#[]内的^代表取反的意思
    执行结果:['a c', 'a1c', 'a+c', 'a2c', 'a9c', 'a*c', 'a-c']
    

    例子:取出_sb

    print(re.findall('[a-z]_sb','egon alex_sb12332wxx_sb,lxx_sb'))#[]匹配一个字符后面跟_sb
    执行结果:['x_sb', 'x_sb', 'x_sb']
    print(re.findall('[a-z]+_sb','egon alex_sb12332wxxxxx_sb,lxx_sb'))#[]+匹配多个字符后面跟_sb
    执行结果:['alex_sb', 'wxxxxx_sb', 'lxx_sb']
    print(re.findall('([a-z]+)_sb','egon alex_sb12332wxxxxx_sb,lxx_sb'))#只取到_sb的人名
    执行结果:['alex', 'wxxxxx', 'lxx']
    

    10、|  :代表或者

    print(re.findall('compan(ies|y)','Too many companies have gone bankrupt, and the next none is my company'))#取出公司的英文单词
    执行结果:['ies', 'y']
    

    注:(?:代表取匹配成功的所有内容,而不仅仅只是括号内的内容)

    print(re.findall('compan(?:ies|y)','Too many companies have gone bankrupt, and the next none is my company'))
    执行结果:['companies', 'company']
    print(re.findall('alex|sb','alex sb ssdfsdf  alex sb egon'))
    执行结果:['alex', 'sb', 'alex', 'sb']
    

    11、re模块的其他用法

     1 print(re.findall('alex|sb','123123 alex sb sdlfjlsdkegon alex sb egon'))
     2 print(re.search('alex|sb','123123 alex sb sdlfjlsdkegon alex sb egon').group())
     3 #执行结果:['alex', 'sb', 'alex', 'sb'] , alex
     4 
     5 
     6 print(re.search('^alex','alex sb sdlfjlsdkegon alex sb egon').group())#表示从头开始匹配
     7 print(re.match('alex','alex sb sdlfjlsdkegon alex sb egon').group())#表示从头开始匹配
     8 #执行结果:alex , alex
     9 
    10 
    11 info='a:b:c:d'
    12 print(info.split(':'))
    13 print(re.split(':',info))
    14 #执行结果:['a', 'b', 'c', 'd'] , ['a', 'b', 'c', 'd']
    15 
    16 info='a :cd/e'
    17 print(re.split('[ :\/]',info))
    18 #执行结果:['a', '', 'c', 'd', 'e']
    19 
    20 #需求:xxx与Sb调换
    21 print(re.sub('(xxx)(.*?)(SB)',r'321',r'xxx is SB'))
    22 #执行结果:SB is xxx
    23 
    24 print(re.sub('([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)',r'52341',r'xxx123+ is SB'))
    25 #执行结果:SB123+ is xxx
    26 
    27 pattern=re.compile('alex')#把常用的正则表达式式存起来,以后直接用
    28 print(pattern.findall('alex is alex sdjflk alexalex'))
    29 #执行结果:['alex', 'alex', 'alex', 'alex']
    
  • 相关阅读:
    Codeforces 632D 暴力
    Codeforces 632C
    nyoj 1070 诡异的电梯 简单dp
    Codeforces 6225B KMP
    Codeforces 631D
    笔记4:多层感知器(自定义模型)
    笔记3:逻辑回归(分批次训练)
    笔记2:张量简介
    笔记1:入门实例
    送快递(贪心+树形结构)
  • 原文地址:https://www.cnblogs.com/xwjhyy/p/11603306.html
Copyright © 2020-2023  润新知