簡體   English   中英

Python-如何從字符串中提取特定數字?

[英]Python - How extract specific numbers from strings?

我有以下遵循以下模式的string = 'ABCD 1NAME 123456'string = 'ABCD 1NAME 123456' 我需要提取最后一位數字以獲取ID。 我嘗試使用isdigit方法,但是問題是它還會在Name之前返回數字。

注意事項:

  1. 有時名稱不包含數字。
  2. 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的回答是我所知的最佳解決方案,但僅是提供另一種想法。

您可以創建一個列表並存儲其中每個字符串的所有[-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'] 

您可以使用split將字符串按空格分割,然后用-1索引以提取id部分。

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

rsplit()怎么樣?

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

我假設您正在使用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)

您可能可以這樣做:

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

如果確實是一系列數字,它將分割字符串並輸出最右邊的一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM