• Python 进阶技能:字符串的分割、替换、删除、拼接、对齐


    来自B站

    拆分含有多个分隔符的字符串

    示例:单分隔符推荐使用split(),多分隔符推荐使用正则表达式的re.split()

     1 # 拆分含有多个分隔符的字符串
     2 
     3 # 只有一个分隔符可用 s.split()
     4 
     5 s = 'abcde,fghij;klmnop|qrstu\tvwxyz'
     6 
     7 # 方法1、  一般方法
     8 def my_split(s, seps):
     9     res = [s]
    10     for sep in seps:
    11         t = []
    12         list(map(lambda ss: t.extend(ss.split(sep)), res))
    13         res = t
    14     return res
    15 print(my_split(s, ',;|\t'))
    16 
    17 # 方法2、  用于锻炼思维,不适合实战
    18 from functools import reduce
    19 my_split2 = lambda s, seps: reduce(lambda li, sep: sum(map(lambda ss: ss.split(sep), li), []), seps, [s])
    20 print(my_split2(s, ',;|\t'))
    21 
    22 # 方法3、  正则表达式  - 推荐
    23 import re
    24 my_split3 = re.split('[,;\t|]+', s)
    25 print(my_split3)

    判断字符串的开头或结尾

    示例:

     1 # 判断字符串的开头、结尾
     2 
     3 # str.startswith()  str.endswith()
     4 # 多个匹配时参数使用元组
     5 
     6 str1 = 'aaabbbcccdddeeefffgg'
     7 print(str1.startswith("a"))     # 输出 True
     8 print(str1.startswith("g"))    # False
     9 print(str1.endswith("a"))    # 输出 False
    10 print(str1.endswith("g"))    # True

    调整文本格式:

    示例:

     1 # 如何调整文本中的文本格式,如给日期换个格式
     2 
     3 # 如某日志格式 2022-03-17 23:25:00 xxxxxxxxxxxxxxxxxx
     4 
     5 import re
     6 
     7 s = '2022-03-17 23:25:00 xxxxxxxxxxxxxxxxxx'
     8 # \d是数字,{4}是四位,\d{4}是4位数字;(\d{4})用组括号起来,替换的时候就可用\组号(\3)使用了
     9 res = re.sub(r'(\d{4})-(\d{2})-(\d{2})', r'\3/\2/\1', s)
    10 print(res)    # 17/03/2022 23:25:00 xxxxxxxxxxxxxxxxxx
    11 
    12 # 如果要替换的地方多,可用用名称代替组号
    13 res = re.sub(r'(?P<y>\d{4})-(?P<m>\d{2})-(?P<d>\d{2})', r'\g<d>/\g<m>/\g<y>', s)
    14 print(res)

     拼接多个字符串成一个大的

    示例:

     1 # 拼接多个字符串成一个大的字符串
     2 
     3 # 方法1、使用 ”+“进行拼接
     4 
     5 s1 = 'abc'
     6 s2 = '123'
     7 print(s1 + s2)   # abc123
     8 print(s1.__add__(s2))  # abc123
     9 print(s2.__add__(s1))   # 123abc
    10 
    11 li = ['ab', 'cd', 'ef', 'ghi', 'jkl', 'mn']
    12 s = ''
    13 for x in li:
    14     s += x
    15 print(s)  # abcdefghijklmn
    16 
    17 # 方法2、reduce()
    18 from functools import reduce
    19 res = reduce(str.__add__, li)
    20 print(res)
    21 
    22 # 以上方法在创建过程中创建大量多余的字符串,浪费空间
    23 
    24 # 方法3、使用str.join(),一次性创建内存,并一次性连接
    25 print(''.join(li))   # abcdefghijklmn

    对字符串进行左右居中对齐

    示例:

     1 # 对字符串进行左、右、居中对齐
     2 
     3 dict_ = {
     4     "Join": 100,
     5     "Michael": 80,
     6     "Ello": 22,
     7     "Summery": 88,
     8     "Christoper": 70
     9 }
    10 
    11 # 方法1、使用字符串的str.ljust(), str.rjust(), str.center()
    12 max_len = max(map(len, dict_.keys()))
    13 for k, v in dict_.items():
    14     print(k.ljust(max_len), ":", v)
    15 """
    16 输出
    17 Join       : 100
    18 Michael    : 80
    19 Ello       : 22
    20 Summery    : 88
    21 Christoper : 70
    22 """
    23 
    24 # 方法2、python内置函数  左对齐10位:format(s, '<10'),右对齐10位:format(s, '>10'),居中对齐10位:format(s, '^10')
    25 # 用其他符号补齐 format(s, '*<10')   abc*******
    26 # format除了字符串,还可以是数字
    27 print(format(123, '+'))  # 加号代码显示符号,,输出+123
    28 print(format(-123, '+'))  # -123
    29 print(format(-123, '>+10'))   # '      -123'
    30 print(format(-123, '=+10'))  # ’-      123‘
    31 print(format(-123, '0=+10'))   # -000000123
    32 print(format(123, '*=10'))   # *******123

    剔除字符串中不要的字符

    示例:

     1 # 去掉字符串中不需要的字符
     2 
     3 # 方法1、strip()  lstrip()  rstrip()
     4 
     5 # 方法2、 先切片,再“+”拼接
     6 # s = 'abc:123'
     7 # s[:3] + s[4:]
     8 
     9 # 方法3、replace()  或 re.sub() 删除任意字符串
    10 print('   abc  def  aaa'.replace(' ',''))   # abcdefaaa
    11 import re
    12 print(re.sub('[ \t\n]+', '', ' \t abd \n hihi \t'))   #  abdhihi
    13 print(re.sub('\s+', '', ' \t abd \n hihi \t'))   #  abdhihi
    14 
    15 # 方法4、字符串的translate(),可用同时删除多种不同的字符
    16 s0 = 'abcd1234'
    17 print(s0.translate({ord('a'): 'X', ord('b'): 'Y', ord('c'): 'Z'}))  # XYZd1234   ord() 转Unicode
    18 print(s0.translate(s0.maketrans('abcd', 'XYZK')))  # XYZK1234   替换的位置要对准
    19 print(s0.translate({ord('a'): None}))   # 把字符串替换成None,相当于删掉这个字符串
    20 
    21 s1 = '  python2022@qq.com***  '
    22 res = s1.strip()
    23 print(res)   # python2022@qq.com***
    24 # 左侧lstrip(),右侧rstrip()
    25 print(res.rstrip('*mo'))   # python2022@qq.c
    26 
    27 s2 = 'hello python\r\n'
    28 print(re.sub('\s+', '', s2))
    29 
    30 
    31 s3 = 'wǒ zài xué xí jì suàn jī yǔ yán '  # 字符串是在线转换的,这里用combining判断并非是组合判断
    32 import unicodedata
    33 # unicodedata.combining()  # 判断字符串是否为组合字符
    34 res = s3.translate(dict.fromkeys([ord(c) for c in s3 if unicodedata.combining(c)]))
    35 print(res)   # 输出 
  • 相关阅读:
    MySQL 一致性读 深入研究
    Operating System Error Codes
    5分钟了解MySQL5.7的Online DDL雷区
    pt-osc原理、限制、及与原生online-ddl比较
    学习笔记:Rick's RoTs -- Rules of Thumb for MySQL
    学习笔记:The Best of MySQL Forum
    学习笔记:Analyze MySQL Performance及慢日志的开启
    MySQL: Building the best INDEX for a given SELECT
    学习笔记:ALTERing a Huge MySQL Table
    Google common_schema 2.2 documentation
  • 原文地址:https://www.cnblogs.com/sue2015/p/16020073.html
Copyright © 2020-2023  润新知