python - re.sub() 具有具有副作用的替换功能

标签 python regex replace side-effects

今天我遇到了以下结构:

import re
l = list('1234')
print(re.sub('.', lambda _: l.pop(0), 'abcd'))

基本上,它使用 sub 和具有副作用的 repl 函数。

撇开有争议的文体问题不谈,这是否定义明确?

例如,我在文档中找不到任何地方可以保证 repl 会以任何特定的顺序 在匹配项上调用(也确实 恰好一次,尽管官方措辞在某种程度上可以解释)。此代码是否存在任何其他实际或潜在问题?

最佳答案

根据documentationre.sub :

Return the string obtained by replacing the leftmost non-overlapping occurrences of pattern in string by the replacement repl.

和:

If repl is a function, it is called for every non-overlapping occurrence of pattern.

因此很明显 re.sub从左到右搜索并替换给定 pattern 的每个匹配项与 repl 的返回值功能。所以是的,您的代码的行为定义明确。但是,它效率不高,因为您是迭代地弹出列表的第一项,每次迭代的时间复杂度为 O(n)。您可以改用迭代器在 O(1) 时间内实现相同的副作用:

import re
i = iter('1234')
print(re.sub('.', lambda _: next(i), 'abcd'))

这也输出:

1234

关于python - re.sub() 具有具有副作用的替换功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57875879/

相关文章:

javascript - 匹配日期格式的正则表达式

unix - 用另一个值替换 unix 文件中的最后一列

java - 如何替换正则表达式的内容

python - Tk TreeView 焦点()。如何获取多条选中的行?

python - Emacs 中的单元模式

python - 如何根据column1的值将1个数据帧拆分为两个数据帧

python - 如何拆分逗号和点?

python - Xpath 获取带有子标签的父标签

regex - 如何找到字符串中元素的分隔符?

php - 使用 CURL 从外部网页中选择特定的 div