python 的字符串 find 方法返回 -1 的问题

问题描述 投票:0回答:1

我正在尝试编写一个接受字符串并返回标记位置的函数。该函数在

tokens = query_string.split()
时工作正常,但如果我尝试使用字符串 lower 方法,如下面的代码所示,我的第一个元组返回为
[(-1, 2), (5, 6), (8, 8), (10, 13)]
,而不是
[(0, 3), (5, 6), (8, 8), (10, 13)]

所需的输出

我用于测试的字符串是“这是一个测试”。

def token_position_list(query_string):
    """
    :param query_string: a string representing a query
    :return: a list of tuples, where each tuple holds the start and end positions of each token
    """
    token_positions = []
    tokens = query_string.lower().split()
    current_position = 0
    for token in tokens:
        start_position = query_string.find(token, current_position)
        end_position = start_position + len(token) - 1
        token_positions.append((start_position, end_position))
        current_position = end_position + 1
    return token_positions

任何人都可以向我解释为什么添加 lower 会出现这种情况以及我如何解决这个问题?

python string find tokenize lowercase
1个回答
0
投票

您的所有标记都是小写的,但

query_string
仍然是混合大小写。因此,如果原始字符串在该标记中包含任何大写字母,它就不会找到该标记。

您应该将

query_string
转换为小写并进行处理。

def token_position_list(query_string):
    """
    :param query_string: a string representing a query
    :return: a list of tuples, where each tuple holds the start and end positions of each token
    """
    token_positions = []
    query_string = query_string.lower()
    tokens = query_string.split()
    current_position = 0
    for token in tokens:
        start_position = query_string.find(token, current_position)
        end_position = start_position + len(token) - 1
        token_positions.append((start_position, end_position))
        current_position = end_position + 1
    return token_positions
© www.soinside.com 2019 - 2024. All rights reserved.