我有一个文本行,我想将一个变量分配给某个字符串,该字符串直接出现在此行文本中的符号“@”之后
09807754 18 n 03 aristocrat 0 blue_blood 0 patrician 0 013 @ 09623038 n 0000
唯一的问题是这个单词可能不会出现在同一个位置,所以我不能这样做
L = line.split()
K = L[-2]
必须将其作为“@”符号后面的第一个字符串进行搜索。这是它保持不变的唯一地方。
我想要的是K = 09623038
答案 0 :(得分:2)
只需在@
上拆分,然后拆分它之后的任何内容。
before_at, after_at = line.split('@')
K = int(after_at.split()[0])
为了提高效率,如果您只想要在@
之后的第一件事,那么after_at.split(None, 1)
- 只会拆分一次(在空白处)。
当有多个@
时,这会引发异常,这可能是您想要的,也可能不是。
答案 1 :(得分: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
答案 2 :(得分: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'
答案 3 :(得分: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