7-14<X7> re.xml 正则表达式

re.xml 中不知为何不少 XML tag 和 entity 都被破坏了,都逐一修复了~~
本章 typo 太多,故均不列出。
  1. Para 1:……它们的语法非常相似,那么你仅仅阅读一下 re 模块的摘要,大致了解其中可用的函数和参数就可以了。
    (./) 由于它们的语法非常相似,你仅仅阅读一下 re 模块的摘要,大致了解其中可用的函数和参数就可以了。

7.1 概览

  1. Para 2If what you're trying to do can be accomplished with string functions, you should use them. They're fast and simple and easy to read, and there's a lot to be said for fast, simple, readable code.
    如果你要解决的问题利用字符串函数能够完成,你应该使用它们。它们快速、简单且容易阅读,而对于快速、简单、可读性强的代码等方面有很多内容
    (./) ……它们快速、简单且容易阅读,而快速、简单、可读性强的代码可以说出很多好处

7.2 个案研究:街道地址

  1. 例7.1下, Para 1很快,我发现上面的例子,仅仅匹配地址末尾的……
    (./) 很快我发现,在上面的例子中,……

  2. 例7.2, (1):你利用 \b,……在 python 中,由于字符'\'在一个字符串中必须转义这个事实,从而变得非常麻烦。
    (./) 由于字符 '\' 在一个字符串中必须转义,这会变得非常麻烦。

7.3 个案研究:罗马字母

  1. 确定了几个术语的使用:“fives character”翻译为“含五字符”(原译“被5整除的字符”),同样地,“tens character”翻译为“含十字符”(原译“被10整除的字符”)。原译注删去。
  2. Para 1:这是一个表示数字的系统,它能够真正回溯到远古的罗马帝国(因此而得名)。 (./) 它实际上能够追溯到远古的罗马帝国

  3. 列举, 最后一条:罗马数字经常 <!> 从高位到低位书写,…… (./) 一般

7.3.1 校验千位数

  1. Para 1:……由于罗马数字经常 <!> 是从高位到低位书写,…… (./) 一般

  2. 例7.3, (1)^表示仅仅 <!> 在一个字符串的开始匹配其后的字符串内容。 (./)

  3. 同上:M?可选地匹配单个字符 M,由于它 {i} 重复出现三次,…… (!) 根据上文 (./) 最多

  4. 例7.3, (2):re 模块的本质是一个 search 函数
    (!) 模块的本质是函数??
    (./) 模块的关键是一个 search 函数

  5. 同上:你此刻关注的唯一事情,就是模式是否匹配上,可以利用 search 函数的返回值弄清这个事实。
    (./) ……于是我们利用 search 函数的返回值了解这个事实。

  6. 例7.3, (3):'MM' {i} 匹配上是因为…… (./)

  7. 例7.3, (4):'MMM' {i} 匹配上是因为…… (./)

  8. 例7.3, (5):'MMMM' 没有匹配上。因为所有的三个 M 都匹配上,但是正则表达式还有字符串尾部的限制(由于字符 $),然而字符串没有结束……
    (./) 'MMMM' 没有匹配上。因为所有的三个 M 都匹配完了,但是正则表达式还有字符串尾部的限制(由于字符 $),字符串又没有结束

7.3.2 检验百位数

  1. 标题检验百位数 (!) 为和上一节标题“校验千位数”一致, (./) 校验百位数

  2. 文中多次出现了X位数位置 <!> ,实际上指的就是 (./) X位数,一律修正。

  3. Para 1:……,具体用那种方式表达和具体的数值相关
    (./) 具体用那种方式表达和具体的数值有关

  4. 第二次列举:零到三次出现 C 字符(如果是零,表示百位数为 0(./) 出现零次表示百位数为 0

  5. 例7.4, (2):因此 CD 和 D?C?C?C? 两个模式甚至 {X} 不再考虑

  6. Para -1吆!来看正则表达式能够多快变得难以理解?
    (!) 这个语气叹词我可没见过(字典里也找不到这一义项,只能解释为动词,不能做语气词)。
    (./) 哎呀!来看正则表达式能够多快变得难以理解?

7.4 使用 {n,m} 语法

  1. Para 1:在 前面的章节,你处理了相同字符可以重复三次的情况,在正则表达式中有另外一个方式来表达这种情况,并且使代码的可读性更好
    (./) 在前面的章节,你处理了相同字符可以重复三次的情况在正则表达式中有另外一个方式来表达这种情况,并且能提高代码的可读性

  2. 例7.6, (1)The 0 and 3 can be any numbers; if you want to match at least one but no more than three M characters, you could say M{1,3}.
    可是是 0 到 3 之间的任何数字,如果你想要匹配至少 1 次,至多 3 次字符 M,则可以写成 M{1,3}。
    (./) 这里的 0 和 3 可以改成其它任何数字;如果你想要匹配至少 1 次,至多 3 次字符 M,则可以写成 M{1,3}。
    (!) 对照原文,不难判定孰正孰误。

  3. 例7.6, (5):但是 没有匹配 <!> 字符串的结尾。 (!) 根据上文,这里应当是 (./) 没有匹配上

  4. 例7.6下, 注解:没有一个轻松的方法来确定两个正则表达式是否为等价的,……在本书后面的章节,关于如何书写测试样例有更多的讨论
    (./) 没有一个轻松的方法来确定两个正则表达式是否等价。……在本书后面的章节,将更多地讨论如何编写测试样例

7.4.1 校验十位数和个位数

  1. Para 1:现在我们来扩展扩展关于罗马数字的正则表达式,……
    (./) 现在我们来扩展一下关于罗马数字的正则表达式,……

  2. 7.4 Para -2:……我曾经做过这样的事情,但是它并不是那么好看 <!>(./) 有趣

7.5 松散正则表达式

  1. 例7.9, (1):当使用松散正则表达式时,请记住 {X} 最重要的一件事情就是:……

7.6 个案研究:解析电话号码

  1. 例7.10, (1)通常是从左到右阅读正则表达式,……
    (./) 我们通常从左到右阅读正则表达式

  2. 为了用词的统一,后文的分割符 <!> 一律改为 (./) 分隔符

  3. 例7.14, (1):这个正则表达式和前面的几乎相同,除了在第一个记忆组(区号)前面匹配……
    (./) 这个正则表达式和前面的几乎相同,但它在第一个记忆组(区号)前面匹配……

  4. 例7.14, (4):但是你认为在区号前面的所有字符都是非数字字符(\D*)。Aargh.
    (!) 没有翻译??!!
    (./) ……唉!

  5. 例7.15, (2):……,不论这个电话号码的首字符是数字还是不是数字还是在电话号码不同部分之间加上任意数目的任意类型的分隔符。,……
    (./) ……,无论这个电话号码的首字符是不是数字无论在电话号码各部分之间有多少任意类型的分隔符。

7.7 小结

  1. x? 匹配一个可选的 x 字符(换句话说,它匹配 1 次或者 0 次 x 字符)。 (./) 换言之

  2. Para -1:一些人,当遇到一个问题时,想“……”
    (./) 一些人,遇到一个问题时就想:“……”

7.-1 反馈

Name Password4deL ;) =D =) :P :(|) :-| :( X-( B-)