Python如何高效提取~m~\d+~m~模式间隔的目标字符串
更高效的实现方案
直接用正则捕获组一次匹配得到结果,不需要额外处理索引和二次查找原字符串,代码如下:
import re raw_str = "~m~90~m~{Somestringof length 90}~m~20~m~{Some string of len 20}~m~10~m~{Somestringof length 10}" # 正则使用分组捕获分隔符之间的内容 pattern = re.compile(r"~m~\d+~m~(.*?)(?=~m~\d+~m~|$)") result = pattern.findall(raw_str)
运行后result就是你需要的所有目标字符串列表:['{Somestringof length 90}', '{Some string of len 20}', '{Somestringof length 10}']
原理说明
- 正则先匹配标记位
~m~\d+~m~ - 用
(.*?)非贪婪匹配捕获标记位之后的目标内容 - 正向先行断言
(?=~m~\d+~m~|$)用来控制匹配截止到下一个标记位或者字符串结尾,避免内容匹配过长 findall方法会直接返回所有捕获组的内容,不需要再手动查索引切取原串,比原方案少了一次字符串遍历和索引计算的开销,性能提升明显,字符串越长优势越大。
内容的提问来源于stack exchange,提问作者unbesiegbar
相关产品推荐
相关产品推荐

