本帖最后由 zecy 于 2013-2-14 20:22 编辑 Sigil是一个不错的epub制作软件,适合入门用户。Sigil最值得称道的地方就是,允许我们使用正则表达式,大大方便了我们处理文本的过程。 正则表达式,是一种用特殊符号表示文字的方法,主要用在查找和替换方面。 下面的例子可以让你知道正则表达式是干什么用的。 在一个文本中,有这样的一些内容:
为了简化,我们先来看这个部分。
正则表达式作为一种描述字符的方案,在大量软件、编程语言中都有所运用,而在这些不同的平台上,正则表达式的使用方式又往往会有或多或少的差异,在某个平台上管用的表达式,换个地方可能就要改改才能正确运行。那么在这篇文章里,我们主要是讲Sigil中的正则表达式,至于推广应用,就要靠大家去查找资料了。 1. 元字符 我们前面提到,正则表达式一个重要作用就是用特别的符号来代表一类字符,而这些符号就叫做“元字符”。这些元字符在大多数环境下都是通用的。 注意,元字符中所有符号都是半角符号,也就是通常说的英文符号。 以下是一些常见的元字符,实际上还有更多。这些元字符都经过测试,在Sigil下有效。
2. 常用正则表达式 在这一部分,我们回来看一些很常用的正则表达式,这些表达式往往是更复杂表达式的组成部分。 2.1 所有字符
2.2 空白行
2.3 行尾空白字符
2.4 压缩重复符号 查找
3. 应用实例 在这一部分,我们会看一些Sigil使用过程中实际会用到的例子,方便各位了解正则表达式的使用。 3.1 添加标签 你打算为所有的图片添加一个<div>,并且class为images
解说: 查找以“<img”开头,“/>”结尾的所有句子,这个表达式默认分组为“0”,因此可以用“\0”来引用。 如果你的文本中图片语句必定是独立一行的,可以直接使用“<img”这样的简单句子。 同样的,也可以通过“/>”后面是否紧跟换行符“\n”来判断图片是否独立一行,从而实现不同位置图片的匹配。 扩展: 同样的,你可以用这个方法为各种内容很方便的添加标签,如果你常常用到这样的替换,不要忘记善用Sigil的搜索模板功能。 3.2 拼接断行 在一些文本中,会存在断行,我们要把这些断行重新拼接起来。
解说 其实所谓的断行,就是在不该换行的地方进行了换行,那么只要分析出不该换行的特征就可以了。在这个例子中,换行只应该出现在“,”和“。”后面,因此我们查找前面没有“,”或者“。”的换行,并且将其删除就可以了。 因为使用的正则表达式会匹配到“\n”前面的一个字符,为了不把这个字符也删除,所以要用“()”把这个字符保护起来。 扩展 实际上我们还可以使用“零宽断言”来达到这个效果,写法是“(?<![,。]$)\n”,直接替换为空,零宽断言本身就保护了字符。 但是作为一个入门应用,我还是先介绍使用“[^]”的方法,关于零宽断言,有兴趣的朋友可以到这个网址了解: http://blog.csdn.net/rcom10002/acle/details/3159359 3.3 识别章节标题 这是很常见的一个需求,我们往往要为章节标题添加<h1>,<h2>之类的标签。通过3.1我们已经了解到如何添加标签,因此这里着重讲解如何识别标题。
解说 表达式开始的“^”查找内容必须是每一行的开头,这样才不会匹配到正文中的“第N章”之类的内容。当然,还是无法完全排除匹配到正文的可能性,因此要注意替换次数,如果次数和章节数目不符,就要留意了。 通过“|”的使用,我们可以在一个表达式中就匹配到所有的内容,要善用“|”。“第.{1,3}章”是一个保险,最多匹配到“第九十九章”这样的字符串,在实际使用中,往往只需要写“第.章”。如果是“第1章”这样的,就可以用“第\d章”来更精准的匹配。 3.5 自动插入<title></title>内容
解说 通说“()”的捕获群获取所需要的字符串,然后以逆向引用来达到插入内容的目的。 使用Sigil的前置符“(?s)”使得“.*”可以匹配到换行符“\n”,因此表达式可以匹配到“</head>...<h1>”之间的所有内容。 捕获组1保留<title>以外的所有内容,以便稍后恢复,捕获组2获取<h1>中的内容,插入到<title>中去。 这个操作在Sigil中比较有用,因为Sigil默认是不会填写<title>内容的。 |
联系客服