Python 跨多个正则表达式匹配字符串
我有一个带有表的postgresql数据库,其中包含大约5000万个作为地址的字符串条目。字符串的示例包括Python 跨多个正则表达式匹配字符串,python,regex,postgresql,Python,Regex,Postgresql,我有一个带有表的postgresql数据库,其中包含大约5000万个作为地址的字符串条目。字符串的示例包括 NIAID, Opportunist Infect Res Branch, Treatment Res Programs, Div Aids, Bethesda, MD USA PRINCETON UNIV,DEPT PSYCHOL,PRINCETON,NJ 08544 等等 现在我必须检查一个地址是否与大约30000个正则表达式列表中的任何一个匹配。我还需要知道哪个正则表达式是匹配的。
NIAID, Opportunist Infect Res Branch, Treatment Res Programs, Div Aids, Bethesda, MD USA
PRINCETON UNIV,DEPT PSYCHOL,PRINCETON,NJ 08544
等等
现在我必须检查一个地址是否与大约30000个正则表达式列表中的任何一个匹配。我还需要知道哪个正则表达式是匹配的。正则表达式的示例包括
%umass mem med ctr worcester%worcester%ma%
%darnnouth%
对于博士后来说,这当然是“喜欢”的格式。由于正则表达式匹配无法利用索引(无论如何不是很多,我已经为varchar_pattern_ops字段编制了索引),因此此操作的总运行时间大约为30000x5000万
如果有任何python库可以帮助我加快进程,我也可以使用python进行正则表达式匹配
谢谢你的帮助 有什么问题吗:
CREATE TABLE regex (
regex text primary key
);
SELECT * FROM my_table
JOIN regex ON mytextfield like regex;
有什么问题吗
CREATE TABLE regex (
regex text primary key
);
SELECT * FROM my_table
JOIN regex ON mytextfield like regex;
30000个正则表达式:这相当多,如果要在几个查询中重复此操作,您可能需要先编译它们。您所说的“编译”到底是什么意思?查询postgresql数据库不需要编译afaik。而且它不会被重复。这是一次操作。我不确定您是否正确地认为postgres能够将索引用于类似的查询。如果表达式的开头有
%
,则仍将导致序列扫描。确保您选中了EXPLAIN
@ChrisFarmiloe有一个pg_trgm
模块,它可以使用索引进行以%
@amhrpi开头的表达式查看30000个正则表达式:这是相当多的,如果要重复多次查询,您可能需要先编译它们。您所说的“编译”到底是什么意思?查询postgresql数据库不需要编译afaik。而且它不会被重复。这是一次操作。我不确定您是否正确地认为postgres能够将索引用于类似的查询。如果表达式的开头有%
,则仍将导致序列扫描。确保您选中了EXPLAIN
@ChrisFarmiloe有一个pg_trgm
模块,它可以使用索引从%
@amhrpi开始执行表达式。这似乎是最快的选项,因为它使用JOIN
来执行正则表达式匹配。无论如何,可能没有办法进一步加快速度。谢谢。这似乎是最快的选择,因为它使用JOIN
执行正则表达式匹配。无论如何,可能没有办法进一步加快速度。谢谢