首页 > 解决方案 > 无法理解 .join(map(re.escape, example))

问题描述

我无法理解 .join(map(re.escape, example))

我尝试阅读文档和示例代码,但无济于事

operators = ['+', '-', '*', '/', '**']
print ('|'.join(map(re.escape, sorted(operators, reverse=True)))

# output will be \/|\-|\+|\*\*|\*

所以我不确定我的理解是否正确,但我认为这行代码正在做的是

1) 特殊字符数组将按倒序排列

2) 使用 map 函数将数组中的元素映射到转义函数,这样我就可以按原样打印出特殊字符

3)我加入然后使用'|'

但输出与我的理解告诉我的有很大不同。如果有人可以向我解释为什么输出是这样的,那就太好了?提前非常感谢。

标签: pythonsortingescaping

解决方案


reverse=True正如Ry- 所评论的那样,没有什么奇怪的。它引入的唯一变化是排序是降序的 。比较两种变体:

  • sorted(operators)结果['*', '**', '+', '-', '/'](正常(升序)排序),
  • sorted(operators, reverse=True)结果['/', '-', '+', '**', '*'](降序排序)。

然后map(re.escape, ...)应用于re.escape列表的每个元素。

碰巧每个元素中的每个字符都是一个特殊的正则表达式字符,所以它们每个都带有一个反斜杠,因此结果是:['\/', '\-', '\+', '\*\*', '\*'].

然后join(如名称所示)连接这些字符串,|在它们之间插入 a。

所以结果就像你写的一样(输出将是...)。

补充说明:

  1. 我看到你在这里创建了一个带有替代品的正则表达式模式。因此,至少在这种情况下,替代品的顺序并不重要,您可以省略reverse=True

  2. 您对预期结果的评论*\*\ | / | * | - | + 表明您既不知道哪些字符是特殊的正则表达式字符也不知道如何re.escape工作。在网上搜索有关正则表达式的说明并阅读它们。


推荐阅读