Python:如何使用split()方法移动输出变量的位置



这是我的第一篇SO文章,所以请轻松!我有一个脚本,它计算一个名为postIdent的字符串中出现的子字符串ff匹配次数。在此基础上,它对postIdent进行迭代,并提取后面的所有数据,如下所示:

substring = 'ff'
global occurences
occurences = postIdent.count(substring)
x = 0
while x <= occurences:
for i in postIdent.split("ff"):
rawData = i
required_Id = rawData[-8:]
x += 1

为了进一步解释,如果我们取字符串"090fd0909a9090ff90493090434390ff90904210412419ghfsdfs9000f",很明显有3个ff的实例。我需要在子字符串ff的每个实例中获得前面的8个字符,所以对于第一个实例,这将是909a9090。对于rawData,当我从split((方法中获取数据时,我基本上需要将变量required_Id偏移-1,因为我当前获取的是当前字符串的最后8个字符,而不是刚刚拆分的字符串。另一种方法是将当前required_Id传递给下一次迭代,但我无法做到这一点。

split方法获取匹配字符串ff之后的所有内容。使用分区方法可以获得所需的数据,但不允许我以相同的方式迭代字符串。

在列表理解中使用切片操作获取每个分割的最后8位数字:

s = "090fd0909a9090ff90493090434390ff90904210412419ghfsdfs9000ff"
print([x[-8:] for x in s.split('ff') if x])
# ['909a9090', '90434390', 'sdfs9000']

这不是一个难题,但对初学者来说很棘手。

如果在'ff'上拆分字符串,那么除了最后一个子字符串之外,似乎希望每个子字符串的末尾都有八个字符。字符串s的最后八个字符可以使用s[-8:]来获得。序列x的除了最后一个元素之外的所有元素可以类似地通过表达式x[:-1]来获得。

把这两者放在一起,我们得到

subject = '090fd0909a9090ff90493090434390ff90904210412419ghfsdfs9000ff'
for x in subject.split('ff')[:-1]:
print(x[-8:])

这应该打印

909a9090
90434390
sdfs9000

我不会自己拆分,我会使用str.find。这个代码并不花哨,但很容易理解:

fullstr = "090fd0909a9090ff90493090434390ff90904210412419ghfsdfs9000ff"
search = "ff"
found = None # our next offset of
last = 0
l = 8
print(fullstr)
while True:
found = fullstr.find(search, last)
if found == -1:
break
preceeding = fullstr[found-l:found]
print("At position {} found preceeding characters '{}' ".format(found,preceeding))
last = found + len(search)

总的来说,我更喜欢奥斯汀的回答;它要优雅得多。

最新更新