2013-06-12 56 views
1

我有一個文本行,我想一個變量分配給在該行文本的符號「@」後直接出現某些字符串在一行文字蟒蛇的象徵後獲得的第一個字符串

09807754 18 n 03 aristocrat 0 blue_blood 0 patrician 0 013 @ 09623038 n 0000 

唯一的一點是,這個詞可能不會出現在同一位置,所以我不能只是去這樣

L = line.split() 
K = L[-2] 

它要搜索的符號「@」後的第一個字符串。這是唯一保持不變的地方。

什麼,我想是K = 09623038

回答

2

就劈在@,然後分裂後,無論發生什麼事。

before_at, after_at = line.split('@') 
K = int(after_at.split()[0]) 

對於額外的效率,如果你只希望@後的第一件事,做after_at.split(None, 1) - 只有一次拆分(上空白)。

當有多個@時,這可能會引發異常,這可能是也可能不是您想要的。

+1

或使用'partition()' – kindall

+0

@kindall:除了'partition'同樣返回'@',這在這裏是沒用的:) –

+0

不幸的是我找到了一個帶兩個'@'符號的行,這意味着可能會有更多,我如何得到它,以便它在第一個@符號處分裂? @kindall – Johnnerz

0

使用regex

>>> import re 
>>> strs = '09807754 18 n 03 aristocrat 0 blue_blood 0 patrician 0 013 @ 09623038 n 0000' 
>>> re.search(r'@\s+([A-Za-z0-9]+)',strs).group(1) 
'09623038' 
0

如果你喜歡去非正則表達式的路線,這裏是一個要解決你的問題

def findVariable(s): 
    try: 
     start = s.index("@ ") + 2 
     end = s.index(" ", start) 
     return s[start:end] 
    except ValueError: 
     return "" 

print(findVariable("09807754 18 n 03 aristocrat 0 blue_blood 0 patrician 0 013 @ 09623038 n 0000")) 

返回一個函數:09623038

1

Partition是你的朋友:

>>> s='09807754 18 n 03 aristocrat 0 blue_blood 0 patrician 0 013 @ 09623038 n 0000' 
>>> s.rpartition('@') 
('09807754 18 n 03 aristocrat 0 blue_blood 0 patrician 0 013 ', '@', ' 09623038 n 0000') 
>>> k=int(s.rpartition('@')[-1].split()[0]) 
>>> k 
9623038