注:文章原文为Dr. Charles Severance 的 《Python for Informatics》。文中代码用3.4版改写,并在本机测试通过。

11.4 转义字符

  之前我们在正则表达式中使用特殊字符来匹配一行的开头和结尾,或者是指定通配符,当我们想匹配象"$"或"^"的实际字符时,我们需要一个方法来表示这些“正常”的字符。

  我们可以简单的在字符前添加反斜线"\"即可实现匹配。例如,我们可以使用下面的正则表达式找到金钱数额:

import re
x = 'We just received $10.00 for cookies.'
y = re.findall('\$[0-9.]+', x)

  因为我们在“$"符前添加了反斜线前缀,"\$"这个表示式就表示匹配正常的"$"符,而不是表示匹配行的尾部了。这个表达式的后半部分"[0-9.]+"表示匹配一个或者更多的数字或点。要注意的是,在方括号中,字符不是”特殊的“。所以它们是实际上的数字或点。在方括号外的".",则是一个通配符了,可以匹配任何字符。

11.5 小结

  以上是关于正则表达式的浅显介绍,要想更好的应用正则表达式,我们还需更多地学习它的语言。这些包含特殊字符的查询字符串,是沟通你匹配和抽取字符的愿望和正则表达式系统之间的桥梁。下面是一些特殊字符和字符序列:

  ^  匹配行的开头

  $  匹配行的末尾

  .   匹配任意字符(通配符)

  \s   匹配一个空白字符

  \S  匹配一个非空白字符(和\s相反)

  *  应用到它左侧紧挨的字符,表示匹配零个及以上的左侧字符

  *?   应用到它左侧紧挨的字符,表示以非贪婪模式匹配零个及以上的左侧字符

  +  应用到它左侧紧挨的字符,表示匹配一个及以上的左侧字符

  +?  应用到它左侧紧挨的字符,表示以非贪婪模式匹配一个及以上的左侧字符

  [aeiou]  匹配一个只要是在指定字符集内的元音字符。在这个例子中,它将匹配"a","e","i","o","u",而不是其它字符。

  [a-z0-9]  你可以用减号指定字符的范围,本例匹配一个必须是小写字母或数字的任意字符。

  [^A-Za-z]  当方括号内的第一个字符是插入符,它将反转逻辑。本例匹配一个除大小写字母外的其它字符。

  ()  在使用findall()过程中,在正则表达式中添加的括号,在查询匹配过程中将被忽略,但是允许你抽取括号内的匹配字符。

  \b  匹配空的字符串,但只在一个词的开头和结尾。

  \B  匹配空的字符串,但不是在一个词的开头和结尾。

  \d  匹配任意十进制数字,等同与[0-9]。

  \D  匹配任意非数字字符,等同与[^0-9]。

11.6 Unix用户的红利

  自19世纪六十年代,Unix系统就集成了正则表达式用于支持查询文件,并且几乎所有的编程语言都支持正则表达式。

  事实上Unix内置了一个叫做grep(Generalized Regular Expression Parser)的命令行程序。它可以做到本章中search()函数几乎一样的功能。所以如果你使用的是Macintosh或Linux系统,你可以在你的命令行窗口尝试以下命令:

$ grep '^From:' mbox-short.txt

From: stephen.marquard@uct.ac.za
From: louis@media.berkeley.edu
From: zqian@umich.edu
From: rjlowe@iupui.edu

  这个命令让grep显示mbox-short.txt文件中以"From:"开始的行。如果你对grep命令有一定的经验并且读过它的帮助文档,你会发现Python中的正则表达式和grep中的正则表达式有细微的差别。例如,grep不支持非空格字符"\S",所以你需要使用稍微复杂的组合"[^ ]"来匹配一个非空格的任意字符。

Python for Informatics 第11章 正则表达式五(译)的更多相关文章

  1. Python for Informatics 第11章 正则表达式四(译)

    注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 11.3 组合查询和抽取 如果我 ...

  2. Python for Informatics 第11章 正则表达式六(译)

    注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 11.7 调试 Python有一 ...

  3. Python for Informatics 第11章 正则表达式三(译)

    注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 11.2 用正则表达式抽取数据 ...

  4. Python for Informatics 第11章 正则表达式二(译)

    注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 11.1 正则表达式的字符匹配 ...

  5. Python for Informatics 第11章 正则表达式一(译)

    注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 目前为止,我们一直在通读文件,查 ...

  6. 《Python学习手册 第五版》 -第11章 赋值、表达式和打印

    上一章对Python的语句和语法已经进行了基本的说明,接下来就是每个章节的详细说明,本章的主要内容就是标题中涵盖的三点:赋值语句.表达式语句.打印语句 本章重点内容如下: 1.赋值语句 1)赋值语句的 ...

  7. 《python基础教程(第二版)》学习笔记 文件和素材(第11章)

    <python基础教程(第二版)>学习笔记 文件和素材(第11章) 打开文件:open(filename[,mode[,buffering]]) mode是读写文件的模式f=open(r' ...

  8. Python for Infomatics 第12章 网络编程五(译)

    注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 12.8 用urllib读取二进 ...

  9. [flask/python/web] 解析flask web开发(Miguel著)一书第11章主页不显示博文表单的问题

    ---------------------------------------------以下内容2017.7.14更新---------------------------------------- ...

随机推荐

  1. 在Windows Server 2008中布置Web站点时遇到的问题及解决办法

    首先安装了VS2012. 首先在计算机--管理 中添加服务器角色, 添加角色: 进行各种设置: 选择对应的应用程序池,原来默认的是: 需要添加一个4.0的. 添加后,原因:在安装Framework v ...

  2. 制作wordpress留言板

    总结步骤如下: 1.找到模板目录中的single.php文件,复制single.php并重命名为guestbook.php 2.在guestbook最顶部添加如下代码(用于模板调用) <?php ...

  3. jsp一句话

    <%@page import="java.io.*,java.util.*,java.net.*,java.sql.*,java.text.*"%><%!Stri ...

  4. 文件夹锁定(Source)

    文件夹锁定(Source)private void Lock(string folderPath){    try    {        string adminUserName = Environ ...

  5. PHP代码编写规范

    一. 变量命名 a) 所有字母都使用小写 b) 首字母根据变量值类型指定 i. 整数i ii. 浮点数f iii. 字符串s iv. 布尔值b v. 数组a vi. 对象o vii. 资源r viii ...

  6. C和指针 第九章 字符串 字符 字节

    C语言中没有字符串类型,字符串是以NUL结尾的字符数组组成的. 高级字符串查找: //计算字符串起始部分,有多少字符是在group中 size_t strspn(char const * str, c ...

  7. 如何使用Service的Context弹出Dialog对话框,即全局性对话框

    在dialog.show()语句前加入: dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 然后在An ...

  8. sql 创建表、删除表 增加字段 删除字段操作

    下面是Sql Server 和 Access 操作数据库结构的常用Sql,希望对你有所帮助. 新建表:create table [表名]([自动编号字段] int IDENTITY (1,1) PRI ...

  9. PHP PDO的FETCH_NUM、FETCH_BOTH、FETCH_ASSOC

    不容易混淆的有:FETCH_CLASS,FETCH_COLUMN,FETCH_OBJ... 数据库的连接准备部分 $dsn = 'mysql:host=127.0.0.1;port=3306;dbna ...

  10. senlin __init__() got an unexpected keyword argument 'additional_headers'

    从senlin源码重新编译更新了服务,然后执行 senlin的 cli就遇到了错误: __init__() got an unexpected keyword argument 'additional ...