Python字符串中字符的删除

想问一下怎么删除一串字符串中间的东西。就是说例如111ab11cd111想要删掉前面和中间的数字1,只保留后面的3个1。

如果字符串格式都相同的话,不妨试试用re正则表达式实现。re.sub()方法,sub(pattern, repl, string, count=0, flags=0),repl代表需要替换成的字符,如果删除就是替换成空字符。

1、假如你的条件和预期是下面两种情况的话:
1.1、字符串data="11111ab111cd1111cc33d",字符串不以数字结束;预期:删除所有数字,得到非数字字符串data_new='abcdccd';
1.2、字符串data="11111ab111cd1111cc33",字符串以数字结束;预期:删除中间所有数字,保留最后一串数字,得到新字符串data_new='abcdcc33';
2、解决思路:
2.1、判断字符串最后一个是不是数字
2.2、如果不是数字,直接删除中间所有数字;(这里用的是re.split(),生成列表再遍历列表重组成新的字符串)
2.3、如果是数字,把原字符串分成两个列表,一个全是数字的列表b,一个全是非数字的列表a(这里用的是re.split(),生成列表再遍历列表a重组成新的字符串s,再取列表b的最后一个元素拼接成新的字符串data_new,则data_new=s+b[-1]);

3、代码如下:(各位大佬指正)

import re

data = "11111ab111cd1111cc33d"
def char_str():
    li1 = re.split("\d+", data)  # 以数字进行分割 默认全部进行分割
  
    a = []
    for i in li1:
        if i != '':
            a.append(i)
    # print(a)
    return a

def num_str():
    li2 = re.split("\D+", data)  # 以非数字进行分割 默认全部进行分割
    b = []
    for ii in li2:
        if ii != '':
            b.append(ii)
    # print(b)
    return b


def assert_num():
    aa = char_str()
    num = num_str()
    s = ''
    if data[-1] not in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']:
        a_len = len(char_str())
        n = 0
        while n < a_len-1:
            s = s + aa[n+1]
            n = n+1
    else:
        for i in aa:
            s = s+i
        s = s+num[-1]
    print(s)
    return s


assert_num()

对您有帮助,请点击我的回答左下角
“采纳该答案”

先全删除,再配上三个1,来的简单点。🤗

#!/usr/bin/nve python
# coding: utf-8

import re

s = 'hhv1112vvv56vvb89bb12ok111'
s2 =re.sub('\d+', '', s) + '111'
input(f"\n{s}\n{s2}\n")

img