2011-10-06 112 views
3

我正在建立一个字符串函数来提取两个标记之间的字符串内容。它返回一个提取列表Python函数查找两个标记之间的字符串

def extract(raw_string, start_marker, end_marker): 
    ... function ... 
    return extraction_list 

我知道这是可以使用正则表达式来完成,但这个快?这将在我的过程中被称为数十亿次。什么是最快的方法来做到这一点?

如果标记相同并且出现次数奇数,会发生什么情况?

如果开始和结束标记出现多次,该函数应返回多个字符串。

+0

“十亿”?真?也许你应该把它写成C扩展。 –

+0

不再像数百万。 “为什么有数十亿,当你有几百万” –

回答

10

你可能不能去的速度比:

def extract(raw_string, start_marker, end_marker): 
    start = raw_string.index(start_marker) + len(start_marker) 
    end = raw_string.index(end_marker, start) 
    return raw_string[start:end] 

但是,如果你想尝试正则表达式,只是尽力基准它。有一个很好的timeit模块。

+0

同意。如果你的正则表达式是预编译的,它可能不会比这慢,但使用@ viraraptor的解决方案可以避免可能发生的任何正则表达式开销。我不确定python是否有这个功能,但是这样也更容易阅读和维护。 – andronikus

+0

感谢@viraraptor我喜欢这种使用索引和事实你已经占多个单个字符的标记。如果开始和结束标记出现多次,会发生什么情况?例如多个名字的引号。你想要返回引号中的项目列表 –

相关问题