如何以指定字符串为起始值从长文本中提取多个子字符串
高效提取指定单词开头的限定长度子字符串
用正则表达式的re.finditer方法可以高效解决这个问题,它能快速定位所有目标单词的起始位置,再根据字符限制截取对应子串,比手动遍历效率高得多。
代码示例
import re # 示例长文本 long_text = "apples can be red, apples can also be green, apple is a common fruit" target_word = "apple" char_limit = 10 # 限定提取的字符数量 # 转义目标单词,避免正则特殊字符干扰匹配 pattern = re.escape(target_word) # 找到所有匹配的位置 matches = re.finditer(pattern, long_text) # 提取符合要求的子字符串 result = [] for match in matches: start_pos = match.start() # 计算结束位置,超出文本长度时自动取到末尾 end_pos = start_pos + char_limit substring = long_text[start_pos:end_pos] result.append(substring) print(result)
说明
re.escape(target_word):处理目标单词中的正则特殊字符(比如.、*),确保精准匹配原单词。re.finditer:返回所有匹配的迭代器,每个元素包含匹配的起始位置,不会只返回第一个匹配项。- 截取逻辑:从每个匹配的起始位置开始,取
char_limit个字符,若文本剩余长度不足则自动截断到文本末尾。
运行上述代码,输出结果为:
['apples can b', 'apples can a', 'apple is a f']
内容的提问来源于stack exchange,提问作者Massimo Genna
相关产品推荐
相关产品推荐

