我在这里找专业人士的建议。我在一个数据库里有一个字符串的列表,比如“MD”,“PHD”,“MR”等各种称呼。它有几百行,我按特定的顺序接收(MD比MR更重要)。我还有一系列people对象,我将迭代这些对象,需要一种非常有效的匹配方法。我试过两种,也许没有别的方法了。在
我的第一次尝试是当我收到名单时,重新编译每一个都列在一个单子里。然后。。。在
theregexlist = ["MR", "DR", "MRS" ... "MISS", "PHD"] #several hundred
personname = "MR JOEY SMITH" #other examples are similar like "BOBBY DR MD JOE"
for theregex in theregexlist:
if re.search(theregex, personname):
do stuffs....
break #since my list is ordered, I only want the first match
确实有效。我还尝试了循环regexlist并构建了一个巨大的匹配regex来捕获parans,重新编译然后:
^{pr2}$是否有某种映射、杠杆键或迭代函数,我只是不认为这会更有效?任何和所有的想法都是感激的!即使它是“是的,它只会很慢,试着用timeit看看哪个更快”,然后我就可以停止搜索了:)谢谢!在
包含所有“particules”(如“MR”、“MS”等)的“big”正则表达式将更加高效,因为它只编译一次。减少函数调用(这是一种优化)。在
如果在分词中有特殊字符,可能需要用
re.escape
对它们进行转义。在您可以编译RegEx并获得对
search
方法的引用。在下面是一个例子:
你会得到:“医生”。在
编辑
确保实现高效的最佳方法是分析它。为此,您可以使用
cProfile
库。在例如:
^{pr2}$剖析器会给你这样的信息:
相关问题 更多 >
编程相关推荐