You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何查找字符串中‘Item 0’的第二次出现位置

问题解决:查找字符串中第二次出现的"Item 0"位置

示例参考

如下示例中:

txt = "Hello, welcome to my world."
x = txt.find("e", 5, 10)
print(x)

输出x的值为8,find方法在第5到第10个字符间查找。

我的问题

我有一个从PDF文档提取的字符串变量:

"CIDADE  DE SÃO PAULO  
SECRETARIA MUNICIPAL DA SAÚDE  
DIVISÃO TÉCNICA DE SUPRIMENTOS  
SETOR DE ATAS DE REGISTRO DE PREÇOS  
Rua General Jardim, 36 – 3° andar – Vila Buarque – CEP 01223 -010 
E X T R A T O  

ATA DE REGISTRO DE PREÇO nº 844/2022 -SMS.G (25%)  
PROCESSO ADMINISTRATIVO nº  6018.2022/0074945 -9 
PREGÃO ELETRÔNICO Nº 918/2022/SMS.G  
ORGÃO GESTOR: SECRETARIA MUNICIPAL DA SAÚDE  
DETENTORA:  PRINCE MED DISTRIBUIDORA DE PRODUTOS 
HOSPITALARES LTDA  
CNPJ:  35.848.045/0001 -03 
OBJETO : FORMULA LÁCTEA INFAN TIL  
VIGÊNC IA: 05/12 /2022 A 05/12 /2023 


Item 02 - FÓRMULA LACTEA, INFANTIL, PÓ, LACTENTES 0 A 6 MESES 
DE VIDA, 800 GR  
R$ 29,55/LATA  
MARCA: NAN CONFOR 1  
FABRICANTE: NESTLÉ  
EMBALAGEM/APRESENTAÇÃO: CX C/ 6 LATAS C/ 800 G  
REGISTRO NO M.S:  400761911  
PROCEDEN CIA: NACIONAL  
Código Supri: 11.260.011.002.0115 -3 

Item 04 - FORMULA INFANTIL, SEGUIMENTO, EM PÓ, PARA LACTENTES 
A PARTIR DO 6º MES DE VIDA 800 G  
R$ 28,15/LATA  
MARCA: NAN CONFOR 2  
FABRICANTE: NESTLÉ  
EMBALAGEM/APRESENTAÇÃO: CX C/ 6 LATAS C/ 800 G  
REGISTRO NO M.S:  400761951  
PROCEDENCIA: NACIONAL  
Código Supri: 11.260.011.002.0063 -7 "

我需要提取“Item 0”后的描述,例如:

"FÓRMULA LACTEA, INFANTIL, PÓ, LACTENTES 0 A 6 MESES"

运行以下代码时,得到第一个“Item 0”的位置:

print(text.find("Item 0"))
# 输出:position: 573 

现在我想查找第二个“Item 0”的位置,应从第574个字符开始查找,但错误编写代码后得到的是第一个位置和574,请求指导如何正确获取第二次出现的位置。

正确实现方法

用find参数定位第二次出现

Python的str.find()方法支持传入起始索引参数,指定从哪个位置开始查找。要获取第二个"Item 0"的位置,步骤如下:

  1. 先拿到第一次出现的位置first_pos
  2. 从first_pos + 1的位置开始调用find(),就能跳过第一个匹配项,找到第二个

代码示例:

first_pos = text.find("Item 0")
if first_pos != -1:
    second_pos = text.find("Item 0", first_pos + 1)
    print(f"第二次出现的位置:{second_pos}")

注意:如果字符串中没有第二个匹配项,second_pos会返回-1,建议加判断避免后续逻辑出错。

批量处理所有匹配项(更实用)

如果要提取所有"Item 0"开头的商品描述,直接循环查找所有匹配位置会更高效:

search_key = "Item 0"
current_start = 0
all_positions = []

while True:
    pos = text.find(search_key, current_start)
    if pos == -1:
        break
    all_positions.append(pos)
    # 更新起始位置为当前匹配项的末尾,防止重复匹配
    current_start = pos + len(search_key)

# 输出所有匹配位置
print(f"所有'Item 0'的位置:{all_positions}")

# 提取每个Item对应的描述
for pos in all_positions:
    # 找到"- "分隔符的位置
    dash_index = text.find(" - ", pos)
    if dash_index != -1:
        # 从分隔符后开始,取到下一个换行前的内容
        line_end = text.find("\n", dash_index + 3)
        item_desc = text[dash_index + 3:line_end].strip()
        print(f"商品描述:{item_desc}")

这段代码不仅能找到所有匹配位置,还能直接提取需要的商品描述,一步到位解决需求。

内容的提问来源于stack exchange,提问作者Fellipe Zambrano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 09:02:14