python 子字符串查找 所有位置

在Python中,你可以使用内置的re模块来查找所有匹配子串的位置。以下是一个使用re.finditer方法查找所有匹配子串位置的例子:

import re
 
def find_all_occurrences(text, pattern):
    matches = re.finditer(pattern, text)
    start_positions = [match.start() for match in matches]
    return start_positions
 
text = "This is a test string for searching substrings"
pattern = "test"
 
positions = find_all_occurrences(text, pattern)
print(positions)  # 输出子串"test"在text中所有出现的起始位置

如果不需要使用正则表达式,而只是想找到字符串中所有的子串位置,可以使用如下方法:

def find_all_occurrences_no_regex(text, sub_text):
    start = 0
    positions = []
    while True:
        start = text.find(sub_text, start)
        if start == -1:
            break
        positions.append(start)
        start += len(sub_text)  # 移动到子串之后继续查找
    return positions
 
text = "This is a test string for searching substrings"
sub_text = "test"
 
positions = find_all_occurrences_no_regex(text, sub_text)
print(positions)  # 输出子串"test"在text中所有出现的起始位置

两种方法都可以找出所有匹配的子串位置。第一种方法使用了正则表达式,第二种方法则是使用Python字符串的find方法。

Python中,查找字符串中子字符串的方法有多种: ### 使用`in`关键字 `in`关键字可用于检查一个字符串是否包含另一个子字符串,返回布尔值。示例代码如下: ```python def find_substring(string, substring): if substring in string: return True else: return False string = "Hello, World!" substring = "World" if find_substring(string, substring): print("找到了子字符串") else: print("未找到子字符串") ``` ### 使用`find()`方法 `find()`方法用于检测字符串中是否包含某个子字符串,如果包含则返回子字符串的下标,否则返回 -1。其基本语法为`变量.find("要查找的内容"[,开始位置,结束位置])`,开始位置和结束位置表示要查找的范围,为空则表示查找所有。示例代码如下: ```python str = "hello world" print(str.find('world')) # 返回6 print(str.find('python')) # 返回-1 ``` ### 使用`index()`方法 `index()`方法同样用于检测字符串中是否包含某个子字符串,如果包含则返回子字符串位置,否则会抛出`ValueError`异常。示例代码如下: ```python str = "hello world" print(str.index('world')) # 返回6 try: print(str.index('Python')) except ValueError as e: print(f"异常: {e}") ``` ### `find()`与`index()`的区别 - **返回值**:若字符串存在,二者都返回子字符串在字符串中第一次出现的位置;若不存在,`find()`返回 -1,`index()`抛出`ValueError`异常。 - **处理速度**:`index()`会先使用快速匹配算法进行一次匹配,匹配成功则直接返回匹配位置查找速度较快;`find()`使用朴素的匹配算法,逐字符进行匹配,查找速度较慢。 - **应用场景**:`index()`一般用于知道要查找子字符串一定会在字符串中出现的情况;`find()`一般用于不确定子字符串是否存在的情况,因为不会抛出异常 [^4]。 ### 使用`rfind()`方法 `rfind()`方法与`find()`类似,不过它是从字符串的右侧开始查找,返回子字符串最后一次出现的位置,若未找到则返回 -1。 ### 查找重复子字符串 可以编写函数来查找字符串中所有重复的子字符串以及它们出现的频率 [^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值