line 33: 疑问 REs 是否应该为 RE,因为英文中有复数形式, 而中文中作为缩写应该不需要了吧? 以下的REs都没有修改。 作者的原文如下: "Regular expressions (REs) provide such an infrastructure for advanced text pattern matching, extraction, and/or search-and-replace functionality. REs are simply strings that use ..." 作者用的是REs, 所以在翻译的时候也遵照原文进行。 译者意见:采用“正则表达式(REs)”的翻译方式,在翻译的术语后将原文的英文缩写附在括号里,像这样:(REs),供读者参考。 状态: 已解决 ----- line 44: 原文: 在此介绍性小节中,我们将向你做简短地介绍。为力求简洁,内容将仅涉及Python编 程中最常用到的关于正则表达式(REs)方面的内容。你们的感受肯定会不尽相同。我们 强烈建议您阅读各个官方帮助文档和与此主题有关的文本。 建议修改: 在此小节中,我们将向你做简短地介绍RE模块。为力求简洁,内容将仅涉及Python编 程中最常用到的关于正则表达式(REs)方面的内容。你们的感受肯定会不尽相同。我们 强烈建议您阅读各个官方帮助文档和与此主题有关的文字。 回复: 作者的原文是:In this introductory subsection, we will give you a brief and concise introduction. 在英文中这样写很顺口,但要完全按照作者写的翻译,确实就有些罗嗦了。 译者意见:保留,等待大家的意见。 状态: 待讨论 ----- line 47: 原文: 核心笔记:比较查找与匹配 建议修改: 核心笔记:查找与匹配的比较 译者意见:一个是动词,一个是名词性词组,作为标题,后者更合适,已更改。 状态: 已解决 ----- line 50-52: 原文: 本章通篇涉及到对查找和匹配用法的讲述。当我们完全讨论与字符串中模式有关的正 则表达式时,我们会用词 “matching”(“匹配”),指的是术语pattern-matching(模式 匹配)。在Python专门术语中,有两种主要方法达成模式匹配:搜索和匹配。搜索,即 在字符串任意部分中查找匹配模式,而匹配, 是指从字符串起始处,寻找匹配某个模 式的整个字符串。 搜索通过search()函数或方法来实现,而匹配是以调用match()函数或方法实现的。 总之,当我们说模式的时候,我们全部使用术语“matching”(“匹配”);我们按照 Python如何完成模式匹配的方式来区分“搜索”和“匹配”。 建议修改: 本章通篇涉及到对查找和匹配用法的讲述。当我们严格讨论与字符串中模式有关的正 则表达式时,我们会使用名词“匹配”(“matching”),它指的是术语“模式匹配” (“pattern-matching”)。在Python专门术语中,有两种主要方法完成模式匹配:搜索 (“searching”)和匹配(“matching”)。搜索,即在字符串任意部分中查找匹配的模 式,而匹配, 是指从字符串开始处,对整个字符串进行模式匹配。 搜索通过search()函数或方法来实现,而匹配是以调用match()函数或方法实现的。 总之,当我们说模式的时候,我们全部使用术语“匹配”;我们按照Python如何完成模 式匹配的方式来区分“搜索”和“匹配”。 译者意见:已做部分修改, 1. 我们会使用术语“匹配”(“matching”), 存疑:翻译成”术语“是否比用“名词”更合适 2.在这段话中:我们会使用名词“匹配”(“matching”),它指的是术语“模式匹配” (“pattern-matching”)。在Python专门术语中,有两种主要方法完成模式匹配:搜索 (“searching”)和匹配(“matching”) 保留原文的术语是有考虑的,因为中文中的任何翻译字眼都不能确切表达该意思,所以,我在术语后的()中写了它们的中文翻译,方便读者理解。 3.有两种主要方法达成模式匹配, 改为,有两种主要方法完成模式匹配 状态: 等待大家的意见 ----- line 59: 原文: 也可以是特别字母,比如,只含有一个字符,“0”和“1”. 代表所有二进制字符串的字 符集合,即,“0,” “1,” “00,” “01,” “10,” “11,” “100,” 等. 建议修改: 也可以是特别字母表,比如,只含有两个字符,“0”和“1”。 该字母表可以表示所有二 进制字符串的集合,即,“0,” “1,” “00,” “01,” “10,” “11,” “100,” 等. 译者意见: 也可以是特别字母,比如,只含有一个字符,“0”和“1”. 该字母表可以表示所有二进制字符串的字符集合,即,“0,” “1,” “00,” “01,” “10,” “11,” “100,” 等. “也可以是特别字母” 这句不能翻译成字母表,因为原文前面已说:We also briefly discussed a regular expression alphabet and for general text, the alphabet ... 状态: 已解决 ----- line 62: 原文: 让我们看看正则表达式的基本情况,来说明虽然正则表达式常被视为是“高级主题”, 有时候它们也是非常简单的。我们用一般文本的标准字母组成简单的正则表达式及它 们所描述的字符串。以下的正则表达式是最基本,最普通的。它们由一个字符模式组 成,仅匹配一个字符串,字符串由正则表达式定义。以下是REs 和匹配它们的字符串。 建议修改: 让我们看看正则表达式的基本情况,虽然正则表达式常被视为是“高级主题”,有时候 它们也是非常简单的。我们用一般文本的标准字母表组成简单的正则表达式及它们所 描述的字符串。以下的正则表达式是最基本,最普通的。它们由一个字符模式组成, 仅匹配一个字符串,该字符串由正则表达式定义。以下是REs 和匹配它们的字符串。 译者意见: 让我们看看正则表达式的基本情况,虽然正则表达式常被 .... 它们由一个字符模式组成,仅匹配一个字符串,该字符串由正则表达式定义。以下是正则表达式(REs)和匹配它们的字符串。 状态: 已解决 ----- line 68: 原文: 上表中第一个正则表达式模式是"foo"。这个模式不包含任何特殊符号去匹配其他符 号,它仅匹配自身所描述的,所以只有字符串"foo"匹配此模式。同理,“Python”和 “abc123.”也一样。 建议修改: 上表中第一个正则表达式模式是"foo"。这个模式不包含任何特殊符号去匹配其他符 号,它仅匹配自身,所以只有字符串"foo"匹配此模式。同理,“Python”和“abc123”也 一样。 译者意见:保持不变 原文是: This pattern has no special symbols to match any other symbol other than those described, ... 状态: 已解决 ----- line 142: 英文原文:是否有错? [..x- y..] 建议修改: [x-y] 译者意见:原文如此,我猜想作者的意思是想表达 省略[x-y]前后的东西? 状态: 待讨论,我也认为有问题,但勘误里没有提到。 ----- line 151: 原文: 不匹配此字符集中出现的任何一个字符,包括某一范围的字符,如果在此字符集中出现 建议修改: 不匹配此字符集中出现的任何一个字符,包括某一范围的字符(如果在此字符集中出现)。 译者意见: 同意 状态: 已解决 ----- line 161: “non-greedy” 是否应该翻译为 “非贪婪性”? 原文: 用于上面出现的任何“非惰性” 版本 建议修改: 以上符号的“非贪婪性”版本 译者意见: 同意 状态: 已解决 ----- line 168: 原文: 匹配封闭RE集,保存为子组 建议修改: 匹配括号中的RE,并保存为子组 译者意见: 已经更改为:匹配封闭括号中正则表达式(RE),并保存为子组。 状态: 已解决 ----- line 174 176 178: 英文: inverse 原文: 反义 建议修改:不是很确定 补集,或者 相反? 译者意见: 我曾看到国内出版的书籍中是这样翻译的,所以就沿用了已约定的译法,大家可以再讨论。 状态: 待讨论 ----- line 190: 原文: 匹配单词边界 建议修改: 匹配单词边界(\B是\b的反义) 译者: 已修改为: 匹配单词边界(\B 是 \b 的反义) 状态: 已解决 ----- line 193: 原文: 匹配已保存的子组 建议修改: 匹配已保存的子组(请参考上面的“(...)”) 译者: 已修改为:匹配已保存的子组(请参考上面的正则表达式符号: (...)) 状态: 已解决 ----- line 204: 原文: 用管道符号( | )匹配多个正则表达式模式 建议修改:alternation翻译成可轮换的,不过感觉也不是很准确 用管道符号( | )匹配多个可轮换的正则表达式模式 译者意见: 直译很拗口 状态: 待讨论 ----- line 223: 原文: 点字符或句号(.)符号匹配除换行符(NEWLINE)外的发任意一个单个字符(Python 的正 则表达式有一个编译标识 [S or DOTALL],该标识能修改这一限制,使 ( . ) 在匹配 时包括换行符(NEWLINEs)。 无论是字母、数字、不包括“\n”的空格、可打印的字符、 还是非打印字符,或是一个符号,“点”,( . )都可以匹配他们。 建议修改:whitespace -> 空白符, space -> 空格符 点字符或句号(.)符号匹配除换行符(NEWLINE)外的任意一个单个字符(Python 的正则 表达式有一个编译标识 [S or DOTALL],该标识能修改这一限制,使 (.) 在匹配时包 括换行符(NEWLINE)。 无论是字母、数字、不包括“\n”的空白符、可打印的字符、还 是非打印字符,或是一个符号,“点”( . )都可以匹配它们。 译者意见: 1. ( . ) 和(NEWLINEs),因原文如此,不作修改。 2. 已删掉多余的"发"字 3. 已修改:whitespace -> 空白符 状态: 已解决 ----- line 248: 原文: 如果想从字符串的开头开始匹配一个模板,你必须用上箭头 carat 符号 ( ^ ) 或 特 殊字符 \A (大写字母A前面加上一个反斜线). 后者主要是为那些没有carat 符号的键 盘使用的,比如说国际键盘。 建议修改:原文拼写错误, carat 应为 caret 如果想从字符串的开头开始匹配一个模式,你必须用脱字符(^,Caret ) 或 特殊字符 \A (大写字母A前面加上一个反斜线). 后者主要是为那些没有caret 符号的键盘使用 的,比如说国际键盘。 译者: 1.原文carat有误,已经更改为caret,翻译成脱字符号 2.模板 改为 -> 模式 状态: 已解决 ----- line 270: 原文: 特殊字符 \b and \B 与用来匹配单词边界的。 建议修改: 特殊字符 \b 和 \B 用来匹配单词边界。 译者: 已修改 状态:已解决 ----- line 306: 原文: 唯一的办法是用“ab|cd,” 建议修改: 唯一的办法是用“ab|cd”, 译者: 原文txt文件如此,已更改原文及对应翻译。 状态:已解决 ----- line 327: 原文: [^aeiou] 一个非元音字符 (练习: 为什么我们说”非元音“, 而不说”辅音字母“) 建议修改: [^aeiou] 一个非元音字符 (练习: 为什么我们说”非元音“, 而不说”辅音字母“?) 译者: 已添加标点 "?" 状态:已解决 ----- line 330: 原文: [^\t\n] 以一个Tab制表符和换行符开始的字符串 建议修改: [^\t\n] 除了制表符和换行符以外 译者: 已修改为:除TAB制表符和换行符以外的任意一个字符 状态:已解决 ----- line 334: 原文: ["-a] 在使用ASCII字符集的系统中,顺序值在‘"‘ 和 “a”之间的任意一个字 符,即,顺序号在34 and 97之间的某一个字符。 建议修改: ["-a] 在使用ASCII字符集的系统中,顺序值在“"” 和 “a”之间的任意一个字 符,即,顺序号在34和97之间的某一个字符。 译者: and 已添加翻译为 "和" 状态:已解决 ----- line 348: 原文: 在上表中,我们注意到问号被用到不止一次(被重载),意思是匹配出现零次或一次的 情况,或有其他含义:紧跟在使用封闭操作符的匹配后面(+?),要求搜索引擎匹配的 字符串越短越好。 建议修改: 意译 在上面的表格中,我们注意到问号被用到不止一次(其实问号的作用被重载),有时候 被用来匹配出现零次或一次的情况,有时候还有其他含义:紧跟在使用封闭操作符的 匹配后面,要求搜索引擎匹配的字符串越短越好。 译者: 修改为: 在上表中,我们注意到问号被用到不止一次(问号被重载),它有两种含义,或表示匹配出现零次或一次的情况,或是具有另一种含义:紧跟在使用封闭操作符的匹配后面,要求搜索引擎匹配的字符串越短越好。例如:(+?) 状态:已解决 ----- line 352: 原文: 前面提到"越短越好..."是什么意思呢?当用组模式操作符进行模式匹配时,正则表达 式引擎会尽量"吸收"更多的字符匹配模式。这就叫做"贪心"。问号告诉正则表达式引 擎尽可能地偷懒,要求当前匹配的字符越少越好,留下尽可能多的字符给后面的模式 (如果存在)。我们举一个不错的例子 - 在本章末尾,使用非贪心量词的情况。 建议修改:意译 前面提到"越短越好"是什么意思呢?当用组模式操作符进行模式匹配时,正则表达式引 擎对某一匹配模式会"吸收"尽可能多的字符。这就叫做"贪婪"。问号告诉正则表达式 引擎尽可能地偷懒,使得当前匹配的字符越少越好,留下尽可能多的字符给后面的模 式(如果存在地话)。在本章末尾,我们将举一个不错的例子来说明非贪婪性。 译者: 因为“贪心”和“非贪心量词”是正则表达式里术语的传统译法,倾向于保持不变。 状态:待大家讨论 ----- line 361: 原文: [dn]ot? 字符"d"或"o", 后面是一个"o", 最后是最多一个字符"t",即,do, no, dot, not 建议修改: [dn]ot? 字符"d"或"o", 后面是一个"o", 最后一个或者没有"t",即,do, no, dot, not 译者: 建议两种译法:一种是:..最后是最多一个"t",... ; 或保持不变。 状态:待大家讨论 ----- line 373: 原文: 在“长algebraic” 标记里,表示的国际象棋合理的棋盘移动(仅移动,不包括吃子和将 军)。 建议修改: [KQRBNP][a-h][1-8]-[a-h][1-8] “长代数”记谱法中表示的国际象棋合理的棋盘移 动(仅移动,不包括吃子和将军)。 译者: 将“长algebraic” 改为“长代数” 状态:已解决 ----- line 396: 原文: 第一个字符是字母,其余字符(如果存在的话),是字母或数字(它几乎等价于Python语 言中合法的标识符[见参考练习]) 建议修改:exercise 应该翻译成什么?参考练习 还是 练习题? 全书应该统一一下 第一个字符是字母,其余字符(如果存在的话),是字母或数字(它几乎等价于Python语 言中合法的标识符[见练习题]) 译者: 不做改动,待最后统一名称。 状态:已解决 ----- line 439: 英文原版错误,多了一个逗号 原文: \d+(\.\d*)? 表示简单的浮点数,即, 任意个十进制数字,后面跟一个可选的小 数点,然后再接零或多个十进制数字。例如:“0.004,” “2,” “75.,” 等等。 建议修改: \d+(\.\d*)? 表示简单的浮点数,即, 任意个十进制数字,后面跟一个可选的小 数点,然后再接零或多个十进制数字。例如:“0.004,” “2,” “75.” 等等。 译者: 原文错误,已修改。 状态:已解决 ----- line 456: 原文: 而且支持子组和按命名操作。 建议修改: 而且支持子组命名操作。 译者: “而且支持子组和按命名操作” 改为:“同时它还支持对正则表达式分组进行命名和按名字调用”。 状态:已解决 ----- line 459: 原文: re引擎已在Python1.6版本中被重写,改进的它的性能并添加了对Unicode的支持。 建议修改: re引擎已在Python1.6版本中被重写,改进了它的性能并添加了对Unicode的支持。 译者: "的"->"了" 状态:已解决 ----- line 466: 原文: 其中有很多函数也适用于已编译的正则表达式对象(regex objects) 和正则"匹配对象 " (RE “match objects”)的方法。 建议修改: 其中有很多函数也以方法形式存在于已编译的正则表达式对象(regex objects) 和正 则"匹配对象" (RE “match objects”)中。 译者: 更改为: 其中有很多函数也可以作为已编译的正则表达式对象(regex objects) 和正则"匹配对象"(RE “match objects”)的方法使用。 状态:已解决 ----- line 487 - 499: 没有中文翻译 原文: match(pattern,string, flags=0) search(pattern,string, flags=0) findall(pattern,string[,flags])a finditer(pattern,string[, flags])b Attempt to match RE pattern to string with optional flags; return match object on success, None on failure Search for first occurrence of RE pattern within string with optional flags; return match object on success, None on failure Look for all (non-overlapping) occurrences of pattern in string; return a list of matches Same as findall() except returns an iterator instead of a list; for each match, the iterator returns a match object 建议修改: match(pattern,string, flags=0) 使用RE模式(pattern)来匹配字符串(string),可以使用可选标识。如果匹配成功, 返回一个匹配(“match”)对象,否则返回None search(pattern,string, flags=0) 寻找字符串(string)中第一个匹配RE模式(pattern)的地方,可以使用可选标识。如 果匹配成功,返回一个匹配(“match”)对象,否则返回None findall(pattern,string[,flags]) a 寻找字符串(string)中所有匹配RE模式(pattern)的地方,注意彼此不会互相覆盖, 返回一个匹配(“match”)对象列表。 finditer(pattern,string[, flags]) b 和findall一样,除了返回的不是列表而是迭代器;对于每个匹配,该迭代器返回一个 匹配对象。 译者: 已添加翻译 状态:已解决 ----- line 508-520: 和上面一样,缺少中文翻译,都是属于表15.3 原文: split(pattern,string, max=0) sub(pattern, repl, string, max=0) Match Object Methods 匹配对象的方法 Split string into a list according to RE pattern delimiter and return list of successful matches, splitting at most max times (split all occurrences is the default) Replace all occurrences of the RE pattern in string with repl, substituting all occurrences unless max pro- vided (also see subn() which, in addition, returns the number of substitutions made) group(num=0) Return entire match (or specific subgroup num) 返回全部匹配对 象(或子组数) groups() Return all matching subgroups in a tuple (empty if there weren’t any) a. New in Python 1.5.2; flags parameter added in 2.4. b. New in Python 2.2; flags parameter added in 2.4. 建议修改: split(pattern,string, max=0) 将string根据pattern定界符进行分割,返回的列表中包含了成功的匹配。最多匹配 max次,默认分割所有匹配的地方。 sub(pattern, repl, string, max=0) Replace all occurrences of the RE pattern in string with repl, substituting all occurrences unless max pro- vided (also see subn() which, in addition, returns the number of substitutions made) 将string中所有pattern发生的地方都用repl替换,除非提供了max, 否则替换所有的 地方。(请参考 subn(),该函数还另外返回替换发生的次数。) group(num=0) 返回整个匹配对象(或指定的第num个子组) groups() 使用原组返回所有匹配到的子组,如果没有匹配到的话,返回空。 a. New in Python 1.5.2; flags parameter added in 2.4. b. New in Python 2.2; flags parameter added in 2.4. a. Python 1.5.2中新增; 2.4中增加标识参数 b. Python 2.2新增;2.4中增加标识参数 译者: 已添加翻译 状态:已解决 ----- line 543: 原文: 这些标志符允许进行区别大小写的匹配,使用系统的本地设置对字母或数字组成的字 符进行匹配等。详情请参阅有关文档。这些标志符中,有的在前面已做过简短介绍(例 如,DOTALL,LOCALE),它们也可以做为参数传给模式版本的match()和search()用于进 行特定模式的匹配 - 这些标志符多数用于编译的目的,也正因如此它们被传给模块版 本中的match()和search(),而match()和search()至少要对正则表达式模式编译一 次。如果你想在方法中使用这些标志符,则必须先将它们整合到已编译的regex对象中。 建议修改: 这些标志符允许进行不区别大小写的匹配,使用系统的本地设置对字母或数字组成的 字符进行匹配等。详情请参阅有关文档。这些标志符也可以做为参数传给模式版本的 match()和search()进行特定模式的匹配, 其中有的在前面已做过简短介绍(例如, DOTALL,LOCALE)。这些标志符多数是需要编译的,而它们能被传给模块版本的match() 和search()的原因是,match()和search()肯定要编译一次正则表达式模式的。如果你 想在方法中使用这些标志符,则必须先将它们整合到已编译的regex对象中。 译者: 目前第line 555 原文: these flags are mostly for compilation reasons, hence the reason why they can be passed to the module versions of match() and search(), which do compile an RE pattern once. 更改翻译为: 这些标志符多数用于编译,也正因如此它们可以被传给模块版本的match()和search(),而match()和search()肯定要对正则表达式模式编译一次。 状态:待讨论 ----- line 546: 原文: 除下面的方法外,regex对象还有一些数据属性,其中两个包括给定的编译标志符和需 要编译的正则表达式模式。 建议修改: 除下面的方法外,regex对象还有一些数据属性,其中两个是给定的编译标志符和编译 好的正则表达式模式。 译者: 目前第line 558 原文: In addition to the methods below, regex objects also have some data attributes, two of which include any compilation flags given as well as the regular expression pattern compiled. 更改翻译为: 除下面的方法外,regex对象还有一些数据属性,其中两个是给定的编译标志符和已编译的正则表达式模式。 状态:待讨论 ----- line 573: 原文: 在交互解析器中,我们能确定 m 就是一个匹配对象的实例。 建议修改: 在交互解释器中,我们可以确定 m 就是一个匹配对象的实例。 译者: 未更改 目前第line 585 原文: We can also confirm that m is an example of a match object from within the interactive interpreter: 状态:待讨论 ----- line 589: 原文: >>> m = re.match('foo', 'food on the table') # match succeeds 建议修改: >>> m = re.match('foo', 'food on the table') # 匹配成功 译者: 已添加翻译 状态:已解决 ----- line 608: 原文: 其实,你搜索的模式在一个字符串的中间,而不是字符串开头的机率更大。 建议修改: 其实,你搜索的模式位于一个字符串的中间,而不是字符串开头的机率更大。 译者: 目前第line 585 原文:The chances are greater that the pattern you seek is somewhere in the middle of a string, rather than at the beginning. 修改翻译: 其实,你要搜索的模式出现在一个字符串中间的机率要比出现在字符串开头的机率更大一些。 状态:已解决 ----- line 660: 原文: 以下的例子中,我们将说明点号是不能匹配换行符或非字符(即,空字符串)的: 建议修改: 以下的例子中,我们将展示点号是不能匹配换行符或非字符(即,空字符串)的: 译者: 未修改 line 671: 原文:In the examples below, we show that a dot cannot match a NEWLINE or a non-character, i.e., the empty string: 状态:待讨论 ----- line 723: 原文: 正则表达式中最常见的包括特殊字符的使用 建议修改: 正则表达式中最常见的方面包括特殊字符的使用 译者: 修改为: line 735: 正则表达式中最常见的情况包括特殊字符的使用 状态:已解决 ----- line 836: 原文: 你还应该了解另外四个re模块函数和regex对象方法: findall(), sub(), subn(), and split(). 建议修改: 你还应该了解另外四个re模块函数和regex对象方法: findall(), sub(), subn(), 和 split(). 译者: line 848 添加翻译: and -> "和" 状态:已解决 ----- line 853: 原文: 比如,匹配一个完整电话号码中的一部分-区号,或完整电子邮件地址的一部分-登录名。 建议修改: 比如,匹配一个完整电话号码中的一部分(例如区号),或完整电子邮件地址的一部 分(例如登录名)。 译者: line 865 修改翻译: 匹配一个完整电话号码中的一部分(例如,区号),或完整电子邮件地址的一部分(例如,登录名)。 状态:已解决 ----- line 856: 原文: 如果有多次成功的匹配,返回的结果是一个元组,元组中每个元素都是一个匹配的子 组,像这样的元组(每一个成功的匹配对应一个元组)构成了返回列表中的元素。 建议修改: 如果有多次成功的匹配,每一个成功的匹配返回的结果是一个元组,元组中每个元素 都是一个匹配的子组,像这样的元组构成了返回列表中的元素。 译者: 未做修改 状态:待讨论 ----- line 862: 原文: 有两种函数/方法用于完成搜索/代替的功能: sub()和subn(). 二者几乎是一样的,都 是将某字符串中所有匹配正则表达式模式的部分进行替换。用来替换的部分通常是一 个字符串,但也可能是返回一个用来替换的字符串的函数。 建议修改: 有两种函数/方法用于完成搜索后替换的功能: sub()和subn(). 二者几乎是一样的, 都是将某字符串中所有匹配正则表达式模式的部分进行替换。用来替换的部分通常是 一个字符串,但也可能是函数,它返回一个用来替换的字符串。 译者: line 874 原文:There are two functions/methods for search-and-replace functionality: sub() and subn(). They are almost identical and replace all matched occurrences of the RE pattern in a string with some sort of replacement. The replacement is usually a string, but it can also be a function that returns a replacement string. 修改翻译: 有两种函数/方法用于完成搜索和代替的功能: sub()和subn(). 二者几乎是一样的,都是将某字符串中所有匹配正则表达式模式的部分进行替换。用来替换的部分通常是一个字符串,但也可能是一个函数,该函数返回一个用来替换的字符串。 状态:已解决 ----- line 982: raw string应该统一一下,自然字符串还是原始字符串?下文有好几处地方 原文: 我们推荐使用Python语言中的"自然字符串"来避免混淆。 建议修改: 我们推荐使用Python语言中的"原始字符串"来避免混淆。 译者: 已更改七处: line 996 999 1002 1005 1008 1017 1023, 统一使用术语:"原始字符串" 状态:已解决 ----- line 982: 原文: 在Python 1.6至Python 2.0以后的版本中受(U or UNICODE)的Unicode标志符号影响。 建议修改: 在Python 1.6至Python 2.0以后的版本中受(U 或 UNICODE)的Unicode标志符影响。 译者: 翻译 or -> "或" 状态:已解决 ----- line 1020: 和1017行不吻合 原文: 练习15.2 用RE生成数据的练习(gendata.py) 建议修改: 例15.2 用RE生成数据的练习(gendata.py) 译者: 翻译 练习15.2 正则表达式练习的数据生成代码(gendata.py) -> 例15.2 正则表达式练习的数据生成代码(gendata.py) 状态:已解决 ----- line 1025-1049: 英文代码,不是正确的缩进 英文注释也没有翻译,排版的同志顺便翻译一下吧?实在看不懂 译者: 代码前面是行号 状态:已解决 ----- line 1079: 原文: domes是我们从随机产生的邮件地址中随机选择的主级域名。 建议修改: domes是一个简单的定级域名集合,我们从中为随机产生的电子邮件地址随机选择一个 主级域名。 译者: line 1093 原文: doms is simply a set of higher-level domain names from which we will randomly pick for each randomly generated e-mail address. 更改翻译:domes是一组简单的包含顶级域名的集合,我们将从中随机挑选一个来随机生成电子邮件地址。 状态:已解决 ----- line 1084: 英文应为 (0 - 2^31-1 [sys.maxint]), 在复制到文本的时候无法全部 复制。这个问题可能要留给排版的CorePy解决。 原文: 我们从整个可能的序列(0 to 231 - 1 [sys.maxint])里,选出一个随机整数, ... 那日期就代表从纪元(epoch) 到纪元后232秒之间的某个时刻 建议修改: 我们从整个可能的序列(0 到 2^31-1 [sys.maxint])里,选出一个随机整数, ... 那日期就代表从纪元(epoch) 到纪元后2^32秒之间的某个时刻 译者: line 1098 已修改 状态:已解决 ----- line 1117: 原文: 这个例子要求字符串以所列出的七个字符串之一开头(“^”RE操作符)。如果我们要是把 上面的正则表达式“翻译”成英语的话,那可能会说成这样,”字符串必须以“Mon,” “Tue,”. . . , “Sat,” 或 “Sun” 之一开头“。 建议修改: 这个例子要求字符串以所列出的七个字符串之一开头(“^”RE操作符)。如果我们要是把 上面的正则表达式“翻译”成日常语言的话,那可能会说成这样,“字符串必须以“Mon,” “Tue,”. . . , “Sat,” 或 “Sun” 之一开头”。 译者: line 1130 已修改 更改翻译:如果我们想把上面的正则表达式“翻译”过来,它的意思大概是:”字符串必须以“Mon,” “Tue,”. . . , “Sat,” 或 “Sun” 之一打头“。 状态:已解决 ----- line 1128, 1130, 1132: 缺少英文注释的翻译 原文: >>> m.group() # entire match >>> m.group(1) # subgroup 1 >>> m.groups() # all subgroups 建议修改: >>> m.group() # 整个匹配 >>> m.group(1) # 第一个子组 >>> m.groups() # 所有的子组 译者: 添加翻译 line 1245-1249 状态:已解决 ----- line 1137: 是不是这本书里面的caret都写成carat了?勘误里面应该有吧,待查 原文: 而且,把它翻译成成英语,即,^(carat)意思是以...开始,“ 建议修改: 而且,把它翻译成成日常语言,即,^(caret)意思是以...开始,“ 译者: 勘误里有,已经解决 状态:已解决 ----- line 1197: greedy 的翻译也需要统一一下,贪心还是贪婪? 原文: 为什么匹配错了:+ 是贪心的量词(操作符) 建议修改: 为什么匹配错了:+ 是贪婪的量词(操作符) 译者: 按照惯例,统一用“贪心” 状态:已解决 ----- line 1241: 原文: 练习 建议修改: 15.5 练习 译者: line 1255 练习 -> 15.5 练习 状态:已解决 ----- line 1260: 原文: 你写出的正则表达式要尽可能通用以匹配任意数目的表示街道名字的单词,包括类型指示 建议修改: 你写出的正则表达式要尽可能通用,可以匹配任意数目的街道名字,包括类型指示 译者: 更新翻译: 以匹配任意数目的表示街道名字的单词 -> 要求能够匹配多个单词的街道名字 状态:待讨论 ----- 添加 15章勘误的翻译,Line963: Chapter 15 697 :: 15.3.13 :: Example 15.1 : rewho.py f.readlines() can be shortened to the file iterator f. (minor patch)