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

流上的正则表达式而不是字符串?

后化
2023-03-14
问题内容

假设您要在管道上执行正则表达式搜索并提取,但是该模式可能会跨越多行,该怎么做?也许正则表达式库适用于流?

我希望使用Python库完成这项工作吗?但是任何解决方案都可以,当然不是库,而是cmd行工具。

顺便说一句,我知道如何解决我当前的问题,只是寻求一个通用的解决方案。

如果不存在此类库,那么在常规数学算法永远不需要向后扫描的情况下,为什么常规库不能与流一起使用。


问题答案:

如果您寻求一般解决方案,则算法将需要如下所示:

  1. 将流的一部分读取到缓冲区中。
  2. 在缓冲区中搜索正则表达式
  3. 如果模式匹配,则对匹配项做任何想做的事情,丢弃缓冲区的开头直到match.end()第2步。
  4. 如果模式不匹配,请使用流中的更多数据扩展缓冲区

如果找不到匹配项,最终可能会占用大量内存,但是在一般情况下很难做到更好(考虑.*x在大型文件中尝试将其作为多行正则表达式进行匹配,唯一的x是最后一个字符)。

如果您了解更多有关正则表达式的信息,则可能还有其他情况可以丢弃部分缓冲区。



 类似资料:
  • 我有一根下面这样的弦 现在我希望我的程序验证我的输入是否与字符串“phone”的模式相同 我做了以下工作 没奏效。我也尝试了其他的组合。什么都不起作用。 问题:1。我怎样才能做到这一点,而不使用‘模式’像上面?2.如何用图案做到这一点。我尝试了如下模式 Pattern Pattern=Pattern.compile(“(\d+)”);Matcher match=pattern.Matcher(电话

  • 我有一个包含数千行的文本文件。这里有一个例子 我试图提取'nt60'、'nt50'末尾的字符串。 问题是会包含行尾字符() 我想使用正则表达式搜索来匹配从 (') 开始的字符串,但我不知道我应该用什么来匹配 。 有人能帮忙吗?

  • 问题内容: 正则表达式中是否存在NOT运算符?就像在那个字符串中一样: 我想删除所有但不是一年的:。 因此,正则表达式应返回的内容必须是:。 注意:类似的东西对我不起作用(某种程度上也匹配…) 问题答案: 不,没有直接的非运算符。至少不是您希望的方式。 您可以使用零宽度的负前瞻,但是: 该部分的意思是“仅在 以下 文本(因此:前瞻)与此(因此:否定) 不 匹配时才匹配。但是它实际上并不会 消耗 其

  • 问题内容: 我在用Python将字符串中的数字匹配时遇到麻烦。尽管应该明确匹配,但甚至不匹配 或仅匹配。我的监督在哪里? 问题答案: 阅读文档:http : //docs.python.org/2/library/re.html#re.match 如果在零个或多个字符 开头 的 字符串 您要使用(或)

  • 所以我试着从一行中获取数据,看起来像这样: 现在,我这里是我的代码与正则表达式: “/某物”是我需要得到的,在实际使用中它永远是不同的东西。代码总是打印出“true”,而不是字符串中应该有的东西。我做错了什么?

  • 主要内容:实例下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为: 字符 描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。 ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或