首页 > 解决方案 > Python:删除字符串的最后一个数字

问题描述

我需要 4 行代码来执行此脚本,但我认为可以在 2 行中完成(甚至可能 1 行!让我们做梦吧)。有人有解决方案吗?您可以测试代码以查看预期结果。

def remove_nbr_at_the_end_of_the_string(my_str):
    while my_str[-1] in ["0", "1", "2", "3" ,"4" ,"5" ,"6" ,"7" ,"8" ,"9"]:
        my_str = my_str[:-1]
    if my_str[-1] == " ": my_str = my_str[:-1]
    return my_str


for text in ["ACCDS 122", "GR DDF 0332", "MLMD 12 334", "MMED DFE"]:
    print(remove_nbr_at_the_end_of_the_string(text))

标签: pythonlogic

解决方案


您可以使用正则表达式在一行中执行此操作(好吧,两个,用于import re):

import re

for text in ["ACCDS 122", "GR DDF 0332", "MLMD 12 334", "MMED DFE"]:
    print(re.sub(r" ?\d+$", "", text))

产生:

ACCDS
GR DDF
MLMD 12
MMED DFE

注意前面的空格?。这将限制它只删除一个数字,加上空格,如果有的话。\s如果您想扩展到其他形式的空白,例如制表符,您可以替换为。

另请注意,正如所写,这将删除任何在 Unicode 中被视为数字的内容。如果你想限制到0-9,使用这个:

re.sub(r" ?\d+$", "", text, re.ASCII)

作为未来的仅供参考,您的 while 循环条件可以简化为:

while my_str[-1] in "0123456789":

推荐阅读