python - 无法理解 .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)我加入然后使用'|'
但输出与我的理解告诉我的有很大不同。如果有人可以向我解释为什么输出是这样的,那就太好了?提前非常感谢。
解决方案
reverse=True
正如Ry- 所评论的那样,没有什么奇怪的。它引入的唯一变化是排序是降序的
。比较两种变体:
sorted(operators)
结果['*', '**', '+', '-', '/']
(正常(升序)排序),sorted(operators, reverse=True)
结果['/', '-', '+', '**', '*']
(降序排序)。
然后map(re.escape, ...)
应用于re.escape
列表的每个元素。
碰巧每个元素中的每个字符都是一个特殊的正则表达式字符,所以它们每个都带有一个反斜杠,因此结果是:['\/', '\-', '\+', '\*\*', '\*']
.
然后join
(如名称所示)连接这些字符串,|
在它们之间插入 a。
所以结果就像你写的一样(输出将是...)。
补充说明:
我看到你在这里创建了一个带有替代品的正则表达式模式。因此,至少在这种情况下,替代品的顺序并不重要,您可以省略reverse=True。
您对预期结果的评论
*\*\ | / | * | - | +
表明您既不知道哪些字符是特殊的正则表达式字符也不知道如何re.escape
工作。在网上搜索有关正则表达式的说明并阅读它们。
推荐阅读
- sql-server - 如何区分 SQL Server 中的 2 个阿拉伯字母
- python - 编写一个程序,首先读取输入文件的名称,然后是两个字符串,表示搜索范围的下限和上限
- java - 设置 iText 文档的 BackgroundColor
- javascript - 在本机反应中显示来自firebase的图像(命中错误)
- video - ffmpeg 缩放 4k 视频并添加字幕
- c - 从 crtdefs.h 获取错误
- c++ - 创建 2 个读取和显示数据的函数
- python - Kivy:在 python 代码中设置小部件禁用属性
- r - geom_tile 中每个 x 的专属比例
- c# - Linq to SQL 未在 SubmitChanges() 上保存到数据库