如何有效地将字符串与一组通配符字符串进行匹配?

2024-01-01

我正在寻找一种将单个字符串与一组通配符字符串进行匹配的解决方案。例如

>>> match("ab", ["a*", "b*", "*", "c", "*b"])
["a*", "*", "*b"]

输出的顺序并不重要。

我将按照 10^4 个通配符字符串的顺序进行匹配,并且我将进行大约 10^9 个匹配调用。这意味着我可能必须像这样重写我的代码:

>>> matcher = prepare(["a*", "b*", "*", "c", "*b"]
>>> for line in lines: yield matcher.match("ab")
["a*", "*", "*b"]

我已经开始用 Python 编写一个处理通配符的 trie 实现,我只需要正确处理这些极端情况。尽管如此,我还是很想听听;你会如何解决这个问题?有没有任何 Python 库可以让我更快地解决这个问题?

到目前为止的一些见解:

  • 命名(Python、re)正则表达式在这里对我没有帮助,因为它们只会返回一个匹配项。
  • py解析 http://pyparsing.wikispaces.com/似乎是一个很棒的库,但文档很少,而且据我所知,不支持匹配多个模式。

你可以使用FilteredRE2班级来自re2库 http://code.google.com/p/re2/在 Aho-Corasick 算法实现(或类似算法)的帮助下。从re2 docs http://swtch.com/~rsc/regexp/regexp3.html:

所需的子字符串。假设您有一种有效的方法来检查哪些 字符串列表的一个在大文本中显示为子字符串(例如 例如,也许您实现了 Aho-Corasick 算法),但现在 您的用户希望能够进行正则表达式搜索 也很有效率。正则表达式通常具有较大的文字字符串 在他们中;如果这些可以被识别出来,它们就可以被输入到 字符串搜索器,然后字符串搜索器的结果可以是 用于过滤正则表达式搜索集 必要的。 FilteredRE2 类实现了此分析。给定一个 正则表达式列表,它将正则表达式引导到 计算涉及文字字符串的布尔表达式,然后 返回字符串列表。例如,FilteredRE2 转换 (hello|hi)world[a-z]+foo 代入布尔表达式“(helloworld OR hiworld) AND foo”并返回这三个字符串。给定多个 正则表达式,FilteredRE2 将每个转换为布尔值 表达式并返回所有涉及的字符串。然后,在被 告诉存在哪些字符串,FilteredRE2 可以评估每个字符串 表达式来标识可以的正则表达式集 可能存在。这种过滤可以减少实际的数量 正则表达式搜索显着。

这些分析的可行性关键取决于简单性 他们的投入。第一个使用 DFA 形式,而第二个使用 已解析的正则表达式 (Regexp*)。这些类型的分析将是 如果 RE2 允许非常规,那就更复杂了(甚至可能不可能) 其正则表达式的特点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何有效地将字符串与一组通配符字符串进行匹配? 的相关文章

  • 尽管极其懒惰,但如何在 Python 中模拟 IMAP 服务器?

    我很好奇是否有一种简单的方法来模拟 IMAP 服务器 例如imaplib模块 在Python中 without做很多工作 是否有预先存在的解决方案 理想情况下 我可以连接到现有的 IMAP 服务器 进行转储 并让模拟服务器在真实的邮箱 电子
  • Django REST序列化器:创建对象而不保存

    我已经开始使用 Django REST 框架 我想做的是使用一些 JSON 发布请求 从中创建一个 Django 模型对象 然后使用该对象而不保存它 我的 Django 模型称为 SearchRequest 我所拥有的是 api view
  • InterfaceError:连接已关闭(使用 django + celery + Scrapy)

    当我在 Celery 任务中使用 Scrapy 解析函数 有时可能需要 10 分钟 时 我得到了这个信息 我用 姜戈 1 6 5 django celery 3 1 16 芹菜 3 1 16 psycopg2 2 5 5 我也使用了psyc
  • 将字符串转换为带有毫秒和时区的日期时间 - Python

    我有以下 python 片段 from datetime import datetime timestamp 05 Jan 2015 17 47 59 000 0800 datetime object datetime strptime t
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • pandas 替换多个值

    以下是示例数据框 gt gt gt df pd DataFrame a 1 1 1 2 2 b 11 22 33 44 55 gt gt gt df a b 0 1 11 1 1 22 2 1 33 3 2 44 4 3 55 现在我想根据
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • 如何在 Django 中使用并发进程记录到单个文件而不使用独占锁

    给定一个在多个服务器上同时执行的 Django 应用程序 该应用程序如何记录到单个共享日志文件 在网络共享中 而不保持该文件以独占模式永久打开 当您想要利用日志流时 这种情况适用于 Windows Azure 网站上托管的 Django 应
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像

随机推荐

  • Windows 上的 java 堆栈转储

    我在标准 Windows 命令窗口中有一个正在运行的 java 进程 即我已经运行 cmd 并输入 java jar 如果可能的话 我需要能够获得所有线程的完整堆栈转储 我记得在 Linux 下你可以通过 quit 命令上的选项向 JVM
  • 隐藏警告的杂注:where 条件中使用的字段可能包含空值

    我正在寻找一个编译指示 可以用来隐藏当选择的 WHERE 条件中使用的字段可能包含数据库中的 NULL 值时生成的编译器警告 阅读 SAP note 1088403 后 我知道这里可能存在问题 但我无法应用那里建议的解决方案 因为我在 WH
  • Instagram 有分享按钮吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我已经用谷歌搜索了几个小时 但没有在网络上找到任何与 Instagram 共享按钮相关的文章和文档 有还是没有 您无法使用 API 在 I
  • laravel file_get_contents 路线没有得到响应

    我有一条路线 Route group array prefix gt playlist function Route get raw id array as gt rawPlaylist uses gt PlaylistsControlle
  • React Native - ReactNavigation.addNavigationHelpers 不是函数

    我使用的是react navigation 1 2 1 当我将react navigation更新到2 0 0时 一切都工作正常 但出现以下错误 知道为什么会这样吗 React Navigation add 导航助手不是一个函数 impor
  • 其他开发团队如何处理版本号?

    我们的应用程序已经相当成熟 因此我们的版本已经达到了 16 但是 这可能会给人留下该软件已经过时且脱节的印象 有多少商业应用程序的版本为 20 显然 版本号是相当任意的 其他人使用什么 我非常喜欢 Ubuntu 的 Month date 方
  • Scala Slick 表继承

    我以这种方式实现 SQL 表继承 Table Shape Column Type shape id integer square foat name character varying 64 Table Triangle Column Ty
  • 有没有一种方法可以在不发送测试邮件的情况下测试电子邮件地址是否存在? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在不发送电子邮件的情况下检查电子邮件地址是否存在 https stackoverflow com questions 565504 how to check if an email address
  • Windows Azure 多重部署

    这是场景 太多的网站具有相同的源代码和自己的数据库 每个客户都有自己的系统和自己的数据库 但所有客户都使用相同的源代码 我只有一个 TFS 项目 因为所有客户都使用相同的代码 不是物理上的 因为我必须在每个网站上部署到每个客户 问题 我如何
  • 运输例外

    我正在尝试导入 happybase 但在连接时收到以下错误消息 我已经运行了 Hadoop 伪节点集群和 Hbase 安装的组件版本如下 Hadoop 版本 1 0 4 Hbase 版本 0 94 4 快乐基地 0 4 有人可以查看下面的例
  • R 编程:自动合并字符串

    我正在尝试自动化这里工作的一些系统 专门用于根据调查数据生成报告 假设我对 1 个问题有 3 条评论 current comments lt c too slow not fast enough bad speed 基本上我想要做的是将注释
  • 如何从 servlet 调用 EJB 3.1 非零参数构造函数?

    我有一个 login java servlet 正如其名称所示 它为我的 Web 应用程序提供登录功能 我是一名新手 正在使用 EJB 3 1 和 EE 6 在我的 LoginBean java EBJ 中 我有一个无参数构造函数和另一个具
  • 在android中动态创建活动

    android 如何从 android 清单文件注册一个活动 以便它出现在包管理器中 我确实明白这是在安装应用程序时完成的 有没有办法调整 android 源代码来创建 API 来动态创建和注册活动 android如何从android清单文
  • 以计数作为标签的 2D 摘要图

    我有一个数量的测量值 value 在特定点 lon and lat 如下面的示例数据 library ggplot2 set seed 1 dat lt data frame lon runif 1000 1 15 lat runif 10
  • 有没有办法在 Swift 中重写数组到字符串的转换?

    我正在尝试使用 Swift 让它看起来更 动态类型 只是为了好玩 没有预期的生产价值 现在我陷入了将内置类型转换为的覆盖行为String 例如 我想看到这个输出Array let nums 1 2 3 print nums I m an a
  • 码头工人。没有这样的文件或目录

    我有一些文件 我想将它们移动到 Docker 容器中 但最后 docker 找不到文件 本地计算机上包含文件的文件夹位于 home katalonne flask4 文件结构如果重要的话 The Dockerfile First Flask
  • 如何根据两个不同活动中其他旋转器的位置来更改旋转器的位置

    我在两个不同的活动中有两个 Android 微调器下拉列表 但是两个微调器都具有来自同一源的相同数据 我想根据第一个活动的位置更改第二个活动的位置 如何解决此问题 更新的代码 第一个活动 public class ServiceReques
  • 发送带有正文的 Angular $http.delete

    在我的 Angular 应用程序中 我需要发送 http delete请求这条路线 projects id activityTypes 注意它不以活动类型 ID 结尾 传递具有以下格式的正文 id 2 这是为了允许通过发送数组内的多个对象来
  • 如何在react.js中使用Enter键提交表单?

    这是我的表单和 onClick 方法 我想在按下键盘的 Enter 按钮时执行此方法 如何 N B 没有jquery被赞赏 comment function e e preventDefault this props comment com
  • 如何有效地将字符串与一组通配符字符串进行匹配?

    我正在寻找一种将单个字符串与一组通配符字符串进行匹配的解决方案 例如 gt gt gt match ab a b c b a b 输出的顺序并不重要 我将按照 10 4 个通配符字符串的顺序进行匹配 并且我将进行大约 10 9 个匹配调用