Python-如何从字符串中提取特定的数字?

Python-如何从字符串中提取特定的数字?,python,Python,我有以下模式的一系列字符串: string='ABCD 1NAME 123456'。 我需要提取最后的数字才能生成一个ID。我尝试使用isdigit方法,但问题是它也会返回前面的数字 名字 注意事项: 有时名称与数字不符 len从最后几位开始,范围从5到9 有人能给我推荐一个替代方案吗? 我想我需要测试前一个位置或下一个位置是否为数字才能提取id,但我不知道如何实现此测试。您可以使用正则表达式: import re pattern = re.compile('\d{5,9}$') for

我有以下模式的一系列字符串:
string='ABCD 1NAME 123456'
。 我需要提取最后的数字才能生成一个ID。我尝试使用
isdigit
方法,但问题是它也会返回前面的数字 名字

注意事项:

  • 有时名称与数字不符
  • len
    从最后几位开始,范围从5到9
  • 有人能给我推荐一个替代方案吗? 我想我需要测试前一个位置或下一个位置是否为数字才能提取id,但我不知道如何实现此测试。

    您可以使用正则表达式:

    import re
    
    
    pattern = re.compile('\d{5,9}$')
    
    for match in pattern.findall('ABCD 1NAME 123456'):
        print(match)
    
    输出

    123456
    
    上述正则表达式是指:

    • \d{5,9}
      匹配一组5-9位数字
    • $
      表示数字组必须位于末尾,如果该组可以位于字符串中的任何位置,只需删除此符号即可

    我同意并相信@DanielMesejo response是我所知的最佳解决方案,但只是提供一个替代方案

    解决方案

    您可以创建一个列表并存储其中每个字符串的所有
    [-1]
    索引

    string = 'ABCD 1NAME 123456'
    string = string.split()
    num_ids = []
    num_ids.append(string[-1])
    
    可以将其与一个循环一起使用,以便为所有人提取

    带循环:

    strings = ['ABCD 1NAME 123456','BHDU 1NAME 45678','OIUS 1NAME 109028']
    num_ids = []
    for string in strings:
        string = string.split()
        num_ids.append(string[-1])
    print(num_ids)
    
    可选,可理解

    正如@Alexander提到的

    strings = ['ABCD 1NAME 123456','BHDU 1NAME 45678','OIUS 1NAME 109028']
    num_ids = [string.split()[-1] for string in strings]
    print(num_ids)
    
    输出

    123456
    
    你可能会:

    a = string.split()
    if a[-1].isdigit():
        print(a[-1])
    
    这将拆分字符串,如果它确实是一系列数字,则输出最右边的一个。

    如何
    rsplit()


    我假设您正在使用for循环来迭代所讨论的字符串

    string = 'ABCD 1NAME 123456'
    
    for i in string:
        if i.isdigit():
            print(i)
    
    您可能应该使用split():


    您可以使用
    split
    将字符串按空格分割,然后使用
    -1
    对其进行索引以提取id部分

    string = 'ABCD 1NAME 123456'
    val=string.split()
    print(val[-1])
    

    num\u id.append(字符串[-1])
    更安全。使用列表理解:
    ids=[string.split()
    
    string = 'ABCD 1NAME 123456'
    
    for i in string.split():
        if i.isdigit():
            print(i)
    
    string = 'ABCD 1NAME 123456'
    val=string.split()
    print(val[-1])