龙空技术网

如何通过python去除数字字符串中的前后字符

无言独上西楼依江楼 263

前言:

现在姐妹们对“python删除第一个字符”大致比较关注,我们都需要了解一些“python删除第一个字符”的相关内容。那么小编在网摘上汇集了一些关于“python删除第一个字符””的相关文章,希望咱们能喜欢,看官们快快来学习一下吧!

需求场景

这个是在通过OCR或者其他文字识别工具接口,识别到的数据中包含不需要的字符。而我们只想只要识别的数字,当然这个本身识别结果可能也不是对,那就是另外的问题了。而这里我们假设我们识别到的数据,是包含了我们需要的数据的,那么我们怎么通过python去掉那些多余的字符串了。

这就有几个问题。

字符串不固定,普通字符、特殊字符, 比如: ¥ % @ a b c

长度不固定,0、1个、多个

位置不固定, 前、后

"##@1.23abc""#1.23##""###123##"

我们知道python本身有strip方法可以去除特殊字符,但前提是这个特殊字符是可知的,固定的。而对于我说的那些不固定字符的情况就无法很好处理了。所以只能自己想办法处理了,当然我这个也是笨办法,要不是适合所有的场景。

实现思路

这个思路不是一下想出来的,开始是直接把字符串一个遍历,取出判断是不是数字,一直找到不是数字的位置截断,但是这个无法处理开始就是字符的场景,只能去掉后面是字符串的。

后面重新整理实现思路,

判断字符串是否存在数字字符,变量字符串是否是数字,保存索引在列表中。通过数字索引和字符串,判断数字是不是连续的,只取第一个连续的数字。正则处理方式

def findNumV2(str):    # 去除前后的特殊字符,但是如果开始有两段数字,只会得到第一段数字    res= r"\d+[\.]?\d+"    result = re.compile(res)    strint = result.search(str)    return strint.group()#  返回第一个识别的数字的
实现方法
def Isint(v):    try:        newv = int(v)    except Exception as e:        return False    return Truedef IsFloat(v):    try:        newv = float(v)    except Exception as e:        return False    return Truedef hasNum(v):    # numstr =["0"]    # 判断字符串是否包含数字    for i in range(9):        if str(i) in v:            return True    return Falsedef valueStripv2(v):    # 去除前后的特殊字符,但是如果开始有两段数字,只会得到第一段数字    l = len(v)    if not hasNum(v):        return ""    numlist = []    if Isint(v):        return v    elif IsFloat(v):        return v    else:        return findNumV2(v)def findNum(indexlist,v):    # 把字符串中第一段数字找出来    for i in range(1,len(indexlist)):        newv = v[indexlist[0]:indexlist[i]]        if "." in v:            if IsFloat(newv):                if indexlist[i] == indexlist[-1]:                    # 数字索引是连续的,取到索引列表的当前,但是字符串索引要+1 因为indexlist 的值存的是字符串里面的索引值                    newv = v[indexlist[0]:indexlist[i] + 1]                    return newv                else:                    continue            else:                # 数字索引不是连续的,取到索引列表的前一个,但是字符串索引要+1 因为indexlist 的值存的是字符串里面的索引值                newv = v[indexlist[0]:indexlist[i - 1] + 1]                return newv        else:             if Isint(newv):                 if indexlist[i] == indexlist[-1]:                     # 到最后了                     # 数字索引是连续的,取到索引列表的当前,但是字符串索引要+1 因为indexlist 的值存的是字符串里面的索引值                     newv = v[indexlist[0]:indexlist[i] + 1]                     return newv                 else:                     continue             else:                 # 数字索引不是连续的,取到索引列表的前一个,但是字符串索引要+1 因为indexlist 的值存的是字符串里面的索引值                 newv = v[indexlist[0]:indexlist[i-1]+1]                 return newvdef findNumV2(str):    # 正则处理     # 去除前后的特殊字符,但是如果开始有两段数字,只会得到第一段数字    res= r"\d+[\.]?\d+"    result = re.compile(res)    strint = result.search(str)    return strint.group()#  返回第一个识别的数字的def teststrip():# 测试函数    s = ["!","@","#","$","%","^","&","*","?",",","↓"]    for i in s:        s1 = i+"123"+i*3        s2 = i*3+"12.3"+i        s3 = "12.3"+i*3        s4 = i*3+"12.3"        print(s1,">>>>>",valueStripv2(s1))        print(s2,">>>>>",valueStripv2(s2))        print(s3,">>>>>",valueStripv2(s3))        print(s4,">>>>>",valueStripv2(s4))if __name__ == '__main__':  teststrip()
实现结果

标签: #python删除第一个字符 #js 去除字符串中某个字符 #python去掉字符串的最后一个字符 #python从第一个字符串删除第二个字符串所有字符的值 #js 去除字符串最后一位