当前位置: 首页 > 面试题库 >

一串上数百个RegEx

曹骞仕
2023-03-14
问题内容

我正在使用Java /
Groovy通过RegEx在字符串上查找匹配项(并提取它们)。在性能上,可以说在5000个字符的字符串上找到200个或更多正则表达式匹配项的最佳方法是什么。简而言之,是否可以避免为每个RegEx扫描字符串?

我可以使用java提供的Pattern和Matcher类,但随后必须编译200个模式,然后将字符串传递给matcher 200次。这是唯一的方法吗?


问题答案:

如果您的正则表达式没有通用的匹配项,则可以始终使用其他替代方式将它们组合成一个巨大的匹配项,例如

( regex1 ) | ( regex2 ) | .... | ( regexN )

但是考虑到问题的复杂性,我认为您应该考虑从正则表达式转换为适当的扫描仪/解析器组合。这需要花费一些时间,但是最终的解决方案将更易于管理。您为什么不签出Antlr?



 类似资料:
  • 我研究了一段时间,还没有找到匹配以下模式的线索(不过,我对regex也很陌生),它看起来像 或 所以我想将上面的字符串匹配并捕获为/abc/foo/bar。现在,“/stop”是一个可选字符串,可以附加在模式的末尾。目标是获得所需的捕获,同时忽略“stop”(如果“stop”存在多次,则在第一个“stop”处停止),同时允许在中间设置尽可能多的斜线(行尾的斜线除外)。 但它与以下任何项都不匹配:

  • 我创建了简单的应用程序来开始使用 socket.io,但是当我运行它时,Chrome(在其他浏览器中测试,结果相同)会吃掉我所有的 CPU 并发出许多请求: 我是套接字新手,但我肯定这不是它应该如何工作。在浏览器中运行的代码非常简单,它应该只连接到套接字并将所有接收到的数据记录到控制台: 索引.html 另外,我的服务器文件如下所示: 服务器.js 当我运行服务器时,我让,一切似乎都很好。但是当我

  • 问题内容: 背景/意图: 因此,我将从头开始创建一个事件跟踪器,并对如何执行操作有一些想法,但是我不确定继续进行数据库操作的最佳方法。我感兴趣的一件事是允许这些事件完全动态,但同时允许报告相关事件计数器。 例如,所有国家都按操作系统细分。理想的效果是: 美国事件数 iOS-在美国发生的事件数 Android-在美国发生的事件数 CA事件数 iOS-CA中发生的事件数 Android-CA中发生的事

  • 几个月前,我参加了纽约一家对冲基金公司的面试,不幸的是,我没有得到数据/软件工程师的实习机会。(他们还要求解决方案使用Python。) 我在第一个面试问题上搞砸了... 000-->999 现在我在考虑,我认为不可能想出一个常数时间的算法。是吗?

  • rank ▲ ✰ vote url 41 487 108 705 url 检查一个字符串是否是一个数字 如果一个字符串可以被看做一个数字那么有什么好的方法可以检测出来? 我能想到的方法: def is_number(s): try: float(s) return True except ValueError: return Fals

  • 我对在二进制搜索树中前进和后退的最坏情况效率感兴趣。 不平衡树: 看起来最坏的情况是4- 平衡树: 最坏情况是2- 我认为BST的最坏情况是O(高度-1),对于平衡树是O(log n),对于不平衡树是O(n-1),这是对的吗?