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"的位置,步骤如下:
- 先拿到第一次出现的位置
first_pos - 从
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
相关产品推荐
相关产品推荐

