python 字符串第n次出现的位置

本文介绍了两种不同的子串查找算法实现方法。第一种方法通过循环查找目标字符串中指定子串首次出现的位置及其后续两次出现的位置。第二种方法则通过迭代来确定子串在目标字符串中的出现次数,并更新字符串以便于继续查找。这两种算法对于理解字符串操作和子串匹配的基本原理非常有帮助。
部署运行你感兴趣的模型镜像
def findSubStr01(substr, str):
    i=1
    while i > 0:
        index = str.find(substr)   #第一次出现的位置
        index2=str.find(substr,index+1)  #第二次出现的位置
        index3=str.find(substr,index2+1)  #第三次出现的位置
        print index
        print index2
        print index3
        i-=1

#print findSubStr01('abc','abc a abc')






def findSubStr(substr, str, i):
    count = 0
    while i > 0:
        index = str.find(substr)
        if index == -1:
            return -1
        else:
            str = str[index+1:]   #第一次出现的位置截止后的字符串
            print str
            i -= 1
            count = count + index + 1   #字符串位置数累加
    return count - 1

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 查找 Python 中子字符串第 N 出现的位置Python 中,可以通过自定义函数实现查找子字符串第 N 出现的功能。以下是基于提供的引用内容以及扩展的知识来解决该问题。 通过 `str.find()` 方法可以逐定位子字符串的起始位置,并更新搜索范围直到找到目标数为止[^1]。下面是一个完整的解决方案: ```python def find_nth_occurrence(substring, string, n): start = 0 while n > 0: position = string.find(substring, start) # 使用 find() 定位子字符串 if position == -1: # 如果未找到,则返回 -1 表示不存在 return -1 start = position + 1 # 更新下搜索起点为当前匹配之后的一个字符处 n -= 1 return position - 1 # 返回最终匹配到的位置索引 ``` 上述代码逻辑如下: - 利用循环逐步调用 `find` 函数寻找指定子字符串。 - 每成功找到后调整下一搜索的起始点至当前位置之后一位。 - 当计数值达到所需数时停止并返回最后一查找到的具体偏移量减去初始增量部分作为实际结果[^3]。 另外一种更简洁的方式也可以借助列表推导式完成相同功能: ```python import re pattern = '(?=' + re.escape(substring)+ ')' matches = [m.start() for m in re.finditer(pattern,string)] if len(matches)>=n : matches[n-1] else : -1 ``` 此方法利用正则表达式的前瞻特性构建模式,在整个源字符串上执行迭代器操作收集所有可能符合条件的结果集合;最后判断长度是否满足需求再决定输出相应项或者缺省值 `-1` 来表示失败情形[^4]。 #### 注意事项 - 上述两种方式均假设输入参数有效 (即 substring 和 string 都是非空字符串),如果存在异常情况需额外增加校验处理流程。 - 对于非常庞大的数据集来说第二种方案可能会消耗较多内存资源因为要保存所有的匹配信息而不是仅仅关注某特定序号下的单一记录条目而已。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值