Python字符串与正则表达式:基础语法总结与练习

文章目录

      • 1. 字符串转换函数(返回结果,不修改原字符串)
      • Q1:把一串字符串分行输出
      • Q2: 列出1000以内所有的回文数
      • Q3: 简单加密与解密
      • 2. 字符串对齐方法
      • Q4 打印三角图案
      • 3. 格式化字符串
      • 4. 字符串操作方法
        • 4.1 查找方法 .,pattern,start,end
        • 4.2 分割
        • 4.3 查找替换
        • 4.4 字符串消减
      • Q5. 打印字符
      • Q6. 统计文章单词字数
      • 5. 正则表达式
      • 6. re模块主要方法
      • Q7 python实现数字变宋词

1. 字符串转换函数(返回结果,不修改原字符串)

lower()         #得到小写格式字符串
upper()         #得到大写格式字符串
capitalize()    #得到首字母大写格式
title()         #得到每个单词首字母大写格式
swapcase()      #得到大小写互换格式
ord()/chr()     #ASCII<->字符

Q1:把一串字符串分行输出

  • 函数包括:输入字符串和行数,输出分行整理后的字符
def strbyline(s,line=1):
    # 当字符串不能被行数整除时,在末尾用空格补齐
    if len(s)%line:
        s = s + ' '*(len(s)%line+1)
    # num表示每行输出的字符数  
    num = len(s) // line
    for i in range(0,len(s)+1,num):
        print(s[i-num:i])
strbyline('I want to eat some food! But I cannot find any.',2)
I want to eat some food!
 But I cannot find any. 

Q2: 列出1000以内所有的回文数

def reversetext(lower=1,upper=1000):
    lst=[]
    for i in range(lower,upper):
        s = str(i)
        if s == s[::-1]:
            lst.append(i)
    return lst
reversetext(100,200)
[101, 111, 121, 131, 141, 151, 161, 171, 181, 191]

Q3: 简单加密与解密

  • 加密:
    对明文每m位提取其字符
    到达末尾则回至头部
    已经提取的不再提取
    如:“abcde”,m=3——密文为: “caebd”
  • 解密:
    已知密文和m,如何恢复明文?
def encryption(s='abcde',m=3):
    ss=list(s)
    lst=[]
    index = 0
    for i in range(1,len(s)+1,1):
        index = (index + m - 1) % len(ss)
        lst.append(ss.pop(index))
        
    return ''.join(lst)
encryption('Python is really hard! How!',7)
' ldPs onyw rhhtaiHlera o!!y'
### 创建一个切片序号列表
### 对这个列表再加密一次,按照对应位置填入数字即可
def decryption(s='caebd',m=3):
    nolst = [i for i in range(len(s))]
    lst = [None]*len(s)
    index = 0
    for i in range(1,len(s)+1,1):
        index = (index + m - 1) % len(nolst)
        ref = nolst.pop(index)
        lst[ref] = s[i-1]
    return ''.join(lst)
decryption()
'abcde'

2. 字符串对齐方法

.center()   #返回指定宽度的新字符串,原字符串居中,并使用指定字符填充
.ljust()    #返回指定宽度的新字符串,原字符串左对齐,并使用指定字符填充
.rjust()    #返回指定宽度的新字符串,原字符串右对齐,并使用指定字符填充
print('Hello Python!'.center(70,'-'))
----------------------------Hello Python!-----------------------------
print('Pan Zihan\n'.rjust(65,' '),'2020/06/18  '.rjust(65,' '))
                                                       Pan Zihan
                                                      2020/06/18  

Q4 打印三角图案

def printtriangle():
    n=eval(input('Input lines: '.center(50)))
    for i in range(n):
        print(('* '*i).center(50))
printtriangle()
                  Input lines:                    9
                                                  
                        *                         
                       * *                        
                      * * *                       
                     * * * *                      
                    * * * * *                     
                   * * * * * *                    
                  * * * * * * *                   
                 * * * * * * * *                  

3. 格式化字符串

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cirNzTOo-1624019099369)(attachment:image.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cDMNzy35-1624019099370)(attachment:image-2.png)]

### 输出三位小数:
print('13除以7等于: %.3f'%(13/7))
13除以7等于: 1.857

4. 字符串操作方法

4.1 查找方法 .,pattern,start,end
find()     #查找一个字符串在另一个字符串中首次出现的位置,不存在返回-1
index()    #返回一个字符串在另一个字符串中首次出现的位置,不存在就异常
count()    #返回一个字符串在另一个字符串中出现的次数
4.2 分割
split()     #分割字符串
partition() #将原字符串分割为3部分元组,分隔前字符串、分隔符、分隔后的字符
4.3 查找替换
replace()   #replace(.,pattern,replacement)
4.4 字符串消减
strip()     #这几个方法分别用来删除两端、右端或左端的空格或连续的指定字符

Q5. 打印字符

题目:将股票按照股票的价格从高到低输出。
程序中有三处代码不完整,请填写完整。
注意:除要求填空的位置之外,请勿改动程序中的其他内容

def main():
    #股票名称字符串,用","分割,名称前后可能有多余的空格
    stocks=" 中国软件, 金鹰股份 ,财通证券,中电电机, 生益科技,通用股份,  大唐电信, 永创智能"

    #股票价格字符串,用","分割,价格与上面股票一一对应
    prices="50.41, 6.61, 10.91, 12.78, 13.33, 7.94, 12.91, 7.96"

    #**********SPACE**********
    stockList = [i.strip(' ') for i in stocks.split(',')]

    #**********SPACE**********
    priceList = [float(i) for i in prices.split(',')]

    pairs=zip(priceList,stockList)

    #**********SPACE**********
    for item in sorted(pairs,reverse=True):
        print('{0[1]}({0[0]:.2f}元)'.format(item))
    

if __name__ == '__main__':
    main()
中国软件(50.41元)
生益科技(13.33元)
大唐电信(12.91元)
中电电机(12.78元)
财通证券(10.91元)
永创智能(7.96元)
通用股份(7.94元)
金鹰股份(6.61元)

Q6. 统计文章单词字数

统计文章的单词个数。约定单词由英文字母组成,其他字符只是用来分隔单词。

sss='Look back.'
def word_count(s):
    dct = {}
    s_count = sss.lower()

    for i in range(26):
        j = chr(97+i)
        if s_count.count(j):
            dct[j] = s_count.count(j)
    return dct
word_count(sss)
{'a': 1, 'b': 1, 'c': 1, 'k': 2, 'l': 1, 'o': 2}

5. 正则表达式

  • 正则表达式是普通字符(包括转义字符)、特殊字符(称为元字符)及其不同组合来构成的
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eulhZhIy-1624019099372)(attachment:image.png)]

  • 字符类:由一对[]方括号括起来的字符集合:
    Python字符串与正则表达式:基础语法总结与练习_第1张图片

  • 预定义字符类:正则表达式将常常用到的一些特定字符类形成了若干预定义字符类
    Python字符串与正则表达式:基础语法总结与练习_第2张图片

  • 界匹配符:字符串匹配往往涉及从某个位置开始匹配,例如行的开头或结果、单词边界等
    Python字符串与正则表达式:基础语法总结与练习_第3张图片

  • 重复限定符:指定重复的次数(默认最大匹配)
    Python字符串与正则表达式:基础语法总结与练习_第4张图片

  • 贪婪算法 vs 懒惰算法 python默认采用贪婪算法,加?使用懒惰算法
    Python字符串与正则表达式:基础语法总结与练习_第5张图片

  • 分组符”()”:重复限定符重复前导字符,()表示一个分组(子模式)
    Python字符串与正则表达式:基础语法总结与练习_第6张图片
    选择符”|”,用于选择匹配多个可能的正则表达式中的一个

6. re模块主要方法

  • re 主要函数及用法说明:
findall(pattern,string[,flags])  #列出字符串中模式的所有匹配项,返回匹配结果列表,若pattern含有组(子模式),同时返回组的列表
search(pattern,string[,flags])   #在字符串中寻找模式,若匹配,返回Match对象(参见4.2.5),否则返回None
match(pattern,string[,flags])    #从字符串的开始处匹配模式,若匹配,返回Match对象,否则返回None
split(pattern,string[,maxsplit=0])#根据模式匹配项(匹配分割符)分割字符串,返回分割后的字符串列表,maxsplit为分割的最大次数
sub(pat,repl,string[,count=0])   #将字符串中所有pat的匹配项用repl替换;并返回替换后的字符串,count为替换的最大次数
subn(pat,repl,string[,count=0])  #将字符串中所有pat的匹配项用repl替换;并返回元组:(替换后的字符串,替换次数),count为替换的最大次数
escape(string)                   #将字符串中所有特殊正则表达式字符转义

Q7 python实现数字变宋词

stri = '''00萧瑟 01空空 21一笑 41深处 61一片 81不是 02东风 22黄昏 42时节 62桃李 82时候 03何处 
23当年 43平生 63人生 83肠断 04人间 24天涯 44凄凉 64十分 84富贵 05风流 25相逢 45春色 65心事 
85蓬莱 06归去 26芳草 46匆匆 66黄花 86昨夜 07春风 27尊前 47功名 67一声 87行人 08西风 28一枝 
48一点 68佳人 88今夜 09归来 29风雨 49无限 69长安 89谁知 10江南 30流水 50今日 70东君 90不似 
11相思 31依旧 51天上 71断肠 91江上 12梅花 32风吹 52杨柳 72而今 92悠悠 13千里 33风月 53西湖 
73鸳鸯 93几度 14回首 34多情 54桃花 74为谁 94青山 15明月 35故人 55扁舟 75十年 95何时 16多少 
36当时 56消息 76去年 96天气 17如今 37无人 57憔悴 77少年 97惟有 18阑干 38斜阳 58何事 78海棠 
98一曲 19年年 39不知 59芙蓉 79寂寞 99月明 20万里 40不见 60神仙 80无情 100往事'''

import re
def trans_poem(stri=stri):
    ### 提取单词和数字
    stri = re.sub('\n','',stri)
    no = re.findall('\d\d',stri)
    wrd =re.findall('\w\w',re.sub('\d*','',stri))
    ### 写入字典
    d = {}
    for i in range(len(no)):
        d[no[i]] = wrd[i]
        
    num = input()
    ### 处理输入为奇数情况
    if len(num)%2:
        num+='0'
    lst=[]
    for i in range(0,len(num),2):
        key=num[i]+num[i+1]
        lst.append(d[key])
        
    return ''.join(lst)
    ```

你可能感兴趣的:(Note,python,字符串,正则表达式,列表,自然语言处理)