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

使用Python的re.compile是否值得?

段干兴业
2023-03-14
问题内容

在Python中对正则表达式使用compile有什么好处?

h = re.compile('hello')
h.match('hello world')

re.match('hello', 'hello world')

问题答案:

动态编译相比,我有1000多次运行已编译的正则表达式的经验,并且没有注意到任何可察觉的差异。显然,这是轶事,当然也不是反对编译的一个很好的论据,但是我发现区别可以忽略不计。

编辑:快速浏览一下实际的Python 2.5库代码后,我发现无论何时使用Python(包括对的调用re.match()),Python都会在内部编译和缓存正则表达式,因此,你实际上只是在更改正则表达式时进行更改,因此根本不会节省很多时间-仅节省检查缓存(在内部dict类型上进行键查找)所花费的时间。

从模块re.py(评论是我的):

def match(pattern, string, flags=0):
    return _compile(pattern, flags).match(string)

def _compile(*key):

    # Does cache check at top of function
    cachekey = (type(key[0]),) + key
    p = _cache.get(cachekey)
    if p is not None: return p

    # ...
    # Does actual compilation on cache miss
    # ...

    # Caches compiled regex
    if len(_cache) >= _MAXCACHE:
        _cache.clear()
    _cache[cachekey] = p
    return p

我仍然经常预编译正则表达式,但是只是将它们绑定到一个不错的,可重用的名称上,而不是为了获得预期的性能提升。



 类似资料:
  • 问题内容: 我正在阅读http://docs.python.org/2/library/re.html。按此在蟒re.compile(以下简称“R” - [R “模式标志”)是指原始字符串符号: 解决方案是将Python的原始字符串表示法用于正则表达式模式。反斜杠在以’r’开头的字符串文字中不会以任何特殊方式处理。所以r“ \ n”是一个包含’'和’n’的两个字符的字符串,而“ \ n”是一个包含

  • 我需要处理大约4000个cassandra查询。我将每个查询ResultSet转换为生成器,以保持较低的内存占用。在生成器的每一行中,我只关心大约50个字段。

  • 问题内容: 如果我有一个类似于以下内容的请求映射: 然后使用以下命令调用此请求: 我收到错误消息 无法将’java.lang.String’类型的值转换为’int’类型;嵌套的异常是java.lang.NumberFormatException:对于输入字符串:“” 我可以通过停止javascript客户端发送空参数或接受字符串值并仅在未发现空白时进行解析来解决此问题。 更新 :春季的更高版本现在

  • 如果我有一个类似于下面的请求映射: 我刚刚在spring 4.3.5中测试了这一点,并发现该行为现在实际上会将空值变为默认值,而不会引发,因此;我原来的地图现在工作良好。 我不确定这种行为改变是在spring的哪一个版本中做出的。

  • 问题内容: 我在查看Cristoph Gohlke的python软件包时 ,发现有一个适用于Python 3.3的Virtualenv软件包。 由于标准python库v3.3中有 venv 软件包,我想知道单独安装此软件包是否有优势。 编辑:从这两个软件包的文档中,virtualenv 1.8.2和 venv 我可以说 venv 标准库软件包缺少以下功能: 选项 在setuptools之间选择还是

  • 问题内容: 我目前正在教一年级的大学生python,而令我惊讶的是,我的一些学生决定使用(似乎被奇怪的行为所迷惑)看似无害的功能,却在背后隐藏了一个电话。 所以我的问题是,为什么要调用该函数,并且这样做会更安全呢?我知道Python 3中已对此进行了更改,但乍一看似乎是一个不寻常的设计决策。 Python 2.x输入函数文档 问题答案: 在raw_input上使用Python 2的输入是否有用?