(Python)如果字符串后面只有一个数字,我如何将字符添加到字符串中

vbkedwbf  于 2023-05-16  发布在  Python
关注(0)|答案(3)|浏览(114)

如果char后面有一个数字符号,我如何将'*'添加到字符串中,在特定的char后面?
以下是我尝试过的代码,但不起作用:

def timesAdd(string, char):
    nString = None;
    if char in string:
        for i in range(len(string)):
            if string[i] == char:
                if string[i-1].isdigit():
                    nString += '*' + char;         
                else:
                    nString += char;
            else:
                nString += string[i];
    return nString;

我想做的是:
1.扫描字符串的每个符号,查看它是否等于char
1.如果字符串中的i等于char,返回1,看看它是否是一个数字。
1.如果它是一个数字,在char之前加上'*',否则只将char添加到缓冲区
1.完成后,返回buffer。
为什么它不起作用,我如何改进它?

  • 旁注,我没有尝试的另一个想法是制作一个array of chars,看看string[i]是否等于array of chars中的一个符号(array的示例:“1234567890”)。*
f3temu5u

f3temu5u1#

deceze是对的。这段代码应该可以解决你的问题。

import re

def timesAdd(string, char):
    pattern = r"(?<=\d)(%s)" % char
    replacement = "*" + char
    return re.sub(pattern, replacement, string)
xn1cxnb4

xn1cxnb42#

有几个原因这不起作用:
1.将nString初始化为None。当您尝试使用+=运算符向nString追加字符时,它将抛出错误。
1.循环遍历range(len(string))。这将在第一次迭代时抛出一个错误,因为当你的循环变量i = 0string[i - 1]将不存在。
要解决这些问题,您需要(1)将nString初始化为字符串(2)在i = 1处启动循环
下面是工作代码:

def timesAdd(string, char):
    if char not in string:
        return None
    
    nString = string[0]

    for i in range(1, len(string)):
        if string[i] == char and string[i-1].isdigit():
            nString += '*' 
        nString += string[i]
myss37ts

myss37ts3#

你也可以在不使用 re 的情况下这样做,这样也会稍微加快实现速度:

def timesAdd(string, char):
    if string:
        result = [prev := string[0]]
        for c in string[1:]:
            if c == char and prev.isdecimal():
                result.append('*')
            result.append(prev := c)
        return ''.join(result)
    return string

相关问题