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

时间:2019-06-21 03:35:21

标签: python sorting escaping

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

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

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

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

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

1)特殊字符数组将以相反的顺序排序

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

3)我加入,然后使用“ |”

但是输出与我的理解告诉我的非常不同。如果有人可以向我解释输出的结果,那将是很棒的吗?非常感谢。

1 个答案:

答案 0 :(得分:-1)

正如{em> Ry-所评论的,reverse=True中没有什么奇怪的。 它唯一带来的变化是排序是降序 订购。比较两个变体:

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

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

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

然后join(顾名思义)将这些字符串连接起来,并在它们之间插入|

所以结果与您写的一样(输出将是... )。

其他说明:

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

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