![](/img/trans.png)
[英]Extract numbers from specific lines of a text file starting with strings in Python
[英]Python - How extract specific numbers from strings?
我有以下遵循以下模式的string = 'ABCD 1NAME 123456'
: string = 'ABCD 1NAME 123456'
。 我需要提取最后一位數字以獲取ID。 我嘗試使用isdigit
方法,但是問題是它還會在Name之前返回數字。
注意事項:
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.