Python 跨多个正则表达式匹配字符串

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个正则表达式列表中的任何一个匹配。我还需要知道哪个正则表达式是匹配的。

我有一个带有表的postgresql数据库,其中包含大约5000万个作为地址的字符串条目。字符串的示例包括

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
执行正则表达式匹配。无论如何,可能没有办法进一步加快速度。谢谢