是否可以在不使用string.split的情况下获取字符串行中的最后标记?

2024-06-25 06:16:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在不使用string.spliit的情况下拆分给定的字符串,但是使用下面的代码,我只能得到第一个标记“abc”,但我也想得到“jkl”。我该怎么做?因为这是我的家庭作业,我不想要代码本身,而是它背后的逻辑。先谢谢你

注意:我不允许使用元组、列表、字典等

is_begin = True
def get_field(line):

    t_ind = line.find('\t')
  
    if is_begin ==True:
        return line[0:t_ind]
    else:
        return (line[t_ind:-1])
    return line

letters = "abc\tdef\tghi\tjkl"
print(get_field(letters))

Tags: 字符串代码truefieldgetstringreturnis
3条回答

根据第二个参数查找“\t”在letters中出现的第一个和最后一个位置

如果第二个参数是True,则找到第一个匹配项并按索引值取出第一个标记。这里,当is_begin == True找到第一次出现的索引并通过line[0:t_ind]取出字符串,其中t_ind是第一次出现的索引。0表示从字符串开始,t_ind表示第一个标记的结束

同样,当is_begin != True找到最后一次出现的索引并通过line[t_ind+1:]取出最后一个标记时,其中t_ind是最后一次出现的索引。但是在这里,我们需要将1添加到t_ind,这样我们就可以从\t之后的最后一个标记的开始开始开始。由于我们需要获取最后一个字符的最后一个标记,因此没有给line[t_ind+1:]提供结束索引。希望这是有意义的

可以使用两个位置参数和

find() method finds the first occurrence of the specified value.

rfind() method finds the last occurrence of the specified value.

def get_field(line, is_begin):
  if is_begin == True:
    t_ind = line.find('\t')
    return line[0:t_ind]
  else:
    t_ind = line.rfind('\t')
    return line[t_ind+1:]

letters = "abc\tdef\tghi\tjkl"

print(get_field(letters, True))
print(get_field(letters, False))

输出:

abc
jkl

我认为它可以通过使用迭代器来解决

def get_field(line):

    while True:
        t_ind = line.find('\t')
        if t_ind == -1:
            yield line
            break
        field = line[0:t_ind]
        line = line[t_ind+1:]
        yield field

letters = "abc\tdef\tghi\tjkl"
for field in get_field(letters):
    print(field)

如果您只想要abcjkl,请尝试使用findrfind进行实验

相关问题 更多 >