获取文本python行中符号后面的第一个字符串

时间:2013-06-12 16:02:36

标签: python

我有一个文本行,我想将一个变量分配给某个字符串,该字符串直接出现在此行文本中的符号“@”之后

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

唯一的问题是这个单词可能不会出现在同一个位置,所以我不能这样做

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

必须将其作为“@”符号后面的第一个字符串进行搜索。这是它保持不变的唯一地方。

我想要的是K = 09623038

4 个答案:

答案 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