想问一下怎么删除一串字符串中间的东西。就是说例如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()
#!/usr/bin/nve python
# coding: utf-8
import re
s = 'hhv1112vvv56vvb89bb12ok111'
s2 =re.sub('\d+', '', s) + '111'
input(f"\n{s}\n{s2}\n")