代码改变世界

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

2022-03-18 00:47  起个昵称  阅读(650)  评论(0编辑  收藏  举报

来自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)   # 输出