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

时间:2018-09-11 02:03:31

标签: python

我按照以下模式有一系列字符串: df[ave(1:nrow(df), df$id, FUN = max), ] # id time x #3 1 7 0 #3.1 1 7 0 #3.2 1 7 0 #5 2 13 1 #5.1 2 13 1 #7 3 6 0 #7.1 3 6 0 。 我需要提取最后一位数字以获取ID。我尝试使用string = 'ABCD 1NAME 123456'方法,但是问题是它还会在 名称。

注意事项:

  1. 有时名称不包含数字。
  2. isdigit中最后一位的范围是5到9。

有人可以建议我替代吗? 我认为我需要测试上一个位置或下一个位置是否为数字才能提取ID,但是我无法弄清楚如何执行此测试。

6 个答案:

答案 0 :(得分:5)

您可以使用正则表达式:

import re


pattern = re.compile('\d{5,9}$')

for match in pattern.findall('ABCD 1NAME 123456'):
    print(match)

输出

123456

上面的正则表达式表示:

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

答案 1 :(得分:2)

我同意并相信@DanielMesejo的回答是我所知的最佳解决方案,但仅是提供另一种想法。

解决方案

您可以创建一个列表并将每个字符串中的所有[-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)

输出

(xenial)vash@localhost:~/python/AtBS$ python3.7 pattern.py 
['123456', '45678', '109028']

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

rsplit()怎么样?

s = 'ABCD 1NAME 123456'
print(s.rsplit(' ', 1)[1])
# 123456

答案 4 :(得分:0)

我假设您正在使用for循环来迭代有问题的字符串

string = 'ABCD 1NAME 123456'

for i in string:
    if i.isdigit():
        print(i)

您可能应该使用split():

string = 'ABCD 1NAME 123456'

for i in string.split():
    if i.isdigit():
        print(i)

答案 5 :(得分:-1)

您可能可以这样做:

a = string.split()
if a[-1].isdigit():
    print(a[-1])

如果确实是一系列数字,它将拆分字符串并输出最右边的一个。