My favorites | Sign in
Logo
                
New issue | Search
for
| Advanced search | Search tips
Issue 86: [CorePy2]ch15 全部
1 person starred this issue and may be notified of changes. Back to list
Status:  Fixed
Owner:  wenliang.lu
Closed:  Nov 2007
Cc:  digitalwit
Type-Issue
Priority-Medium
Component-CorePy2


Sign in to add a comment
 
Reported by wenliang.lu, Nov 18, 2007
[CorePy2]chap15

line 33: 疑问
REs 是否应该为 RE,因为英文中有复数形式,
而中文中作为缩写应该不需要了吧?
以下的REs都没有修改。

line 44:
原文:
在此介绍性小节中,我们将向你做简短地介绍。为力求简洁,内容将仅涉及Python编
程中最常用到的关于正则表达式(REs)方面的内容。你们的感受肯定会不尽相同。我们
强烈建议您阅读各个官方帮助文档和与此主题有关的文本。
建议修改:
在此小节中,我们将向你做简短地介绍RE模块。为力求简洁,内容将仅涉及Python编
程中最常用到的关于正则表达式(REs)方面的内容。你们的感受肯定会不尽相同。我们
强烈建议您阅读各个官方帮助文档和与此主题有关的文字。

line 47:
原文:
核心笔记:比较查找与匹配
建议修改:
核心笔记:查找与匹配的比较

line 50-52:
原文:
本章通篇涉及到对查找和匹配用法的讲述。当我们完全讨论与字符串中模式有关的正
则表达式时,我们会用词 “matching”(“匹配”),指的是术语pattern-matching(模式
匹配)。在Python专门术语中,有两种主要方法达成模式匹配:搜索和匹配。搜索,即
在字符串任意部分中查找匹配模式,而匹配, 是指从字符串起始处,寻找匹配某个模
式的整个字符串。
 搜索通过search()函数或方法来实现,而匹配是以调用match()函数或方法实现的。
总之,当我们说模式的时候,我们全部使用术语“matching”(“匹配”);我们按照
Python如何完成模式匹配的方式来区分“搜索”和“匹配”。
建议修改:
本章通篇涉及到对查找和匹配用法的讲述。当我们严格讨论与字符串中模式有关的正
则表达式时,我们会使用名词“匹配”(“matching”),它指的是术语“模式匹配”
(“pattern-matching”)。在Python专门术语中,有两种主要方法完成模式匹配:搜索
(“searching”)和匹配(“matching”)。搜索,即在字符串任意部分中查找匹配的模
式,而匹配, 是指从字符串开始处,对整个字符串进行模式匹配。
 搜索通过search()函数或方法来实现,而匹配是以调用match()函数或方法实现的。
总之,当我们说模式的时候,我们全部使用术语“匹配”;我们按照Python如何完成模
式匹配的方式来区分“搜索”和“匹配”。

line 59:
原文:
也可以是特别字母,比如,只含有一个字符,“0”和“1”. 代表所有二进制字符串的字
符集合,即,“0,” “1,” “00,” “01,” “10,” “11,” “100,” 等.
建议修改:
也可以是特别字母表,比如,只含有两个字符,“0”和“1”。 该字母表可以表示所有二
进制字符串的集合,即,“0,” “1,” “00,” “01,” “10,” “11,” “100,” 等.


line 62:
原文:
让我们看看正则表达式的基本情况,来说明虽然正则表达式常被视为是“高级主题”,
有时候它们也是非常简单的。我们用一般文本的标准字母组成简单的正则表达式及它
们所描述的字符串。以下的正则表达式是最基本,最普通的。它们由一个字符模式组
成,仅匹配一个字符串,字符串由正则表达式定义。以下是REs 和匹配它们的字符串。
建议修改:
让我们看看正则表达式的基本情况,虽然正则表达式常被视为是“高级主题”,有时候
它们也是非常简单的。我们用一般文本的标准字母表组成简单的正则表达式及它们所
描述的字符串。以下的正则表达式是最基本,最普通的。它们由一个字符模式组成,
仅匹配一个字符串,该字符串由正则表达式定义。以下是REs 和匹配它们的字符串。


line 68:
原文:
上表中第一个正则表达式模式是"foo"。这个模式不包含任何特殊符号去匹配其他符
号,它仅匹配自身所描述的,所以只有字符串"foo"匹配此模式。同理,“Python”和
“abc123.”也一样。
建议修改:
上表中第一个正则表达式模式是"foo"。这个模式不包含任何特殊符号去匹配其他符
号,它仅匹配自身,所以只有字符串"foo"匹配此模式。同理,“Python”和“abc123”也
一样。

line 142:
英文原文:是否有错?
[..x- y..]
建议修改:
[x-y]

line 151:
原文:
不匹配此字符集中出现的任何一个字符,包括某一范围的字符,如果在此字符集中出现
建议修改:
不匹配此字符集中出现的任何一个字符,包括某一范围的字符(如果在此字符集中出现)。

line 161: “non-greedy” 是否应该翻译为 “非贪婪性”?
原文:
用于上面出现的任何“非惰性” 版本
建议修改:
以上符号的“非贪婪性”版本

line 168:
原文:
匹配封闭RE集,保存为子组
建议修改:
匹配括号中的RE,并保存为子组

line 174 176 178:
英文:
inverse
原文:
反义
建议修改:不是很确定
补集,或者 相反?

line 190:
原文:
匹配单词边界
建议修改:
匹配单词边界(\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”的空白符、可打印的字符、还
是非打印字符,或是一个符号,“点”( . )都可以匹配它们。

line 248:
原文:
如果想从字符串的开头开始匹配一个模板,你必须用上箭头 carat 符号 ( ^ ) 或 特
殊字符 \A (大写字母A前面加上一个反斜线). 后者主要是为那些没有carat 符号的键
盘使用的,比如说国际键盘。
建议修改:原文拼写错误, carat 应为 caret
如果想从字符串的开头开始匹配一个模式,你必须用脱字符(^,Caret ) 或 特殊字符
\A (大写字母A前面加上一个反斜线). 后者主要是为那些没有caret 符号的键盘使用
的,比如说国际键盘。

line 270:
原文:
特殊字符 \b and \B 与用来匹配单词边界的。
建议修改:
特殊字符 \b 和 \B 用来匹配单词边界。

line 306:
原文:
唯一的办法是用“ab|cd,” 
建议修改:
唯一的办法是用“ab|cd”, 

line 327:
原文:
[^aeiou]					一个非元音字符 (练习: 为什么我们说”非元音“, 而不说”辅音字母“)
建议修改:
[^aeiou]					一个非元音字符 (练习: 为什么我们说”非元音“, 而不说”辅音字母“?)

line 330:
原文:
[^\t\n]						以一个Tab制表符和换行符开始的字符串
建议修改:
[^\t\n]						除了制表符和换行符以外

line 334:
原文:
["-a]						在使用ASCII字符集的系统中,顺序值在‘"‘ 和 “a”之间的任意一个字
符,即,顺序号在34 and 97之间的某一个字符。
建议修改:
["-a]						在使用ASCII字符集的系统中,顺序值在“"” 和 “a”之间的任意一个字
符,即,顺序号在34和97之间的某一个字符。

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

line 373:
原文:
在“长algebraic” 标记里,表示的国际象棋合理的棋盘移动(仅移动,不包括吃子和将
军)。 
建议修改:
[KQRBNP][a-h][1-8]-[a-h][1-8] 		“长代数”记谱法中表示的国际象棋合理的棋盘移
动(仅移动,不包括吃子和将军)。 

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”)中。

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 546:
原文:
除下面的方法外,regex对象还有一些数据属性,其中两个包括给定的编译标志符和需
要编译的正则表达式模式。
建议修改:
除下面的方法外,regex对象还有一些数据属性,其中两个是给定的编译标志符和编译
好的正则表达式模式。

line 573:
原文:
在交互解析器中,我们能确定 m 就是一个匹配对象的实例。
建议修改:
在交互解释器中,我们可以确定 m 就是一个匹配对象的实例。

line 589:
原文:
>>> m = re.match('foo', 'food on the table') # match succeeds
建议修改:
>>> m = re.match('foo', 'food on the table') # 匹配成功

line 608:
原文:
其实,你搜索的模式在一个字符串的中间,而不是字符串开头的机率更大。
建议修改:
其实,你搜索的模式位于一个字符串的中间,而不是字符串开头的机率更大。

line 660:
原文:
以下的例子中,我们将说明点号是不能匹配换行符或非字符(即,空字符串)的:
建议修改:
以下的例子中,我们将展示点号是不能匹配换行符或非字符(即,空字符串)的:

line 723:
原文:
正则表达式中最常见的包括特殊字符的使用
建议修改:
正则表达式中最常见的方面包括特殊字符的使用

line 836:
原文:
你还应该了解另外四个re模块函数和regex对象方法: findall(), sub(), subn(),
and split().
建议修改:
你还应该了解另外四个re模块函数和regex对象方法: findall(), sub(), subn(), 和
split().

line 853:
原文:
比如,匹配一个完整电话号码中的一部分-区号,或完整电子邮件地址的一部分-登录名。
建议修改:
比如,匹配一个完整电话号码中的一部分(例如区号),或完整电子邮件地址的一部
分(例如登录名)。

line 856:
原文:
如果有多次成功的匹配,返回的结果是一个元组,元组中每个元素都是一个匹配的子
组,像这样的元组(每一个成功的匹配对应一个元组)构成了返回列表中的元素。
建议修改:
如果有多次成功的匹配,每一个成功的匹配返回的结果是一个元组,元组中每个元素
都是一个匹配的子组,像这样的元组构成了返回列表中的元素。

line 862:
原文:
有两种函数/方法用于完成搜索/代替的功能: sub()和subn(). 二者几乎是一样的,都
是将某字符串中所有匹配正则表达式模式的部分进行替换。用来替换的部分通常是一
个字符串,但也可能是返回一个用来替换的字符串的函数。
建议修改:
有两种函数/方法用于完成搜索后替换的功能: sub()和subn(). 二者几乎是一样的,
都是将某字符串中所有匹配正则表达式模式的部分进行替换。用来替换的部分通常是
一个字符串,但也可能是函数,它返回一个用来替换的字符串。

line 982: raw string应该统一一下,自然字符串还是原始字符串?下文有好几处地方
原文:
我们推荐使用Python语言中的"自然字符串"来避免混淆。
建议修改:
我们推荐使用Python语言中的"原始字符串"来避免混淆。

line 982:
原文:
在Python 1.6至Python 2.0以后的版本中受(U or UNICODE)的Unicode标志符号影响。
建议修改:
在Python 1.6至Python 2.0以后的版本中受(U 或 UNICODE)的Unicode标志符影响。

line 1020: 和1017行不吻合
原文:
练习15.2 用RE生成数据的练习(gendata.py)
建议修改:
例15.2 用RE生成数据的练习(gendata.py)

line 1025-1049:
英文代码,不是正确的缩进
英文注释也没有翻译,排版的同志顺便翻译一下吧?实在看不懂

line 1079:
原文:
domes是我们从随机产生的邮件地址中随机选择的主级域名。
建议修改:
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 1117:
原文:
这个例子要求字符串以所列出的七个字符串之一开头(“^”RE操作符)。如果我们要是把
上面的正则表达式“翻译”成英语的话,那可能会说成这样,”字符串必须以“Mon,”
“Tue,”. . . , “Sat,” 或 “Sun” 之一开头“。
建议修改:
这个例子要求字符串以所列出的七个字符串之一开头(“^”RE操作符)。如果我们要是把
上面的正则表达式“翻译”成日常语言的话,那可能会说成这样,“字符串必须以“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 1137: 是不是这本书里面的caret都写成carat了?勘误里面应该有吧,待查
原文:
而且,把它翻译成成英语,即,^(carat)意思是以...开始,“
建议修改:
而且,把它翻译成成日常语言,即,^(caret)意思是以...开始,“

line 1197: greedy 的翻译也需要统一一下,贪心还是贪婪?
原文:
为什么匹配错了:+ 是贪心的量词(操作符)
建议修改:
为什么匹配错了:+ 是贪婪的量词(操作符)

line 1241:
原文:
练习
建议修改:
15.5 练习

line 1260:
原文:
你写出的正则表达式要尽可能通用以匹配任意数目的表示街道名字的单词,包括类型指示
建议修改:
你写出的正则表达式要尽可能通用,可以匹配任意数目的街道名字,包括类型指示

这一章应该很难翻译的,辛苦digitalwit了。
 * 需要讨论的问题:
 * raw string和greedy的翻译
 * 还有中文翻译中,为了保证准确性而保留的英文单词,是否要保留复数形式?例如
URLs, REs



 
Comment 1 by wenliang.lu, Nov 18, 2007
caret 在原文中被写成 carat
Comment 2 by digitalwit, Nov 19, 2007
接受  Issue 86 :  [CorePy2]ch15 全部
http://code.google.com/p/openbookproject/issues/detail?id=86
CorePython_zh/Chun_ch15.txt
提交后的版本为264。
Status: Accepted
Comment 3 by Angeloliu, Nov 20, 2007
已由译者本人修正,故关闭
Status: Fixed
Labels: -Type-Defect Type-Issue Component-CorePy2
Sign in to add a comment

Hosted by Google Code