




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
TextPro(cnbook)正则表达式帮助文件1.概述 2.正则表达式的构成 2.1特殊符号 2.2通配符 2.3字符集 2.4子表达式 2.5重复指示符 3.替换表达式 4.自定义替换表功能 4.1在查找替换中使用自定义替换表 5.应用举例(一) 5.1应用举例(二) 5.2应用举例(二)1. 概述从4.5版起,TextPro在查找/替换中支持正则表达式。正则表达式是一种非常强大的搜索功能,通过与TextPro的其它功能相结合,可以方便地实现许多复杂的文本处理工作。正则表达式原本是形式语言理论中的概念,与编译器的构造有密切的联系。但是作为一个应用软件的用户,我们没有必要去细究正则表达式的严格定义和处理方法。本文将从实用的角度出发,阐述在TextPro中引入正则表达式的目的、正则表达式的命令格式,以及如何利用正则表达式完成一些实际的文本处理工作。我们在处理文本时,经常会遇到一些具有某种特定格式,或者说满足某种规则的文本。比如,一个无符号的整数由一连串的数字构成,而一个Email地址的格式则是“用户名主机名”,其中用户名是一串字母或数字,主机名则是由若干个由“.”分隔的字母数字串。正则表达式就是用来指定这种规则的。如果某个字符串满足正则表达式指定的规则,则称该字符串为正则表达式的一个“匹配串”。2. 正则表达式的构成为了方便理解,让我们先来看看大家比较熟悉的数学表达式,“(x+3)*2+y”是一个典型的数学表达式。一个数学表达式由若干个“项”组成,“项”与“项”之间用加号或减号相连;这里“(x+3)*2”和“y”分别是两个项。每个项又由若干个“因子”组成,因子之间用乘号或除号相连;这里第一个项有两个因子“(x+3)”和“2”,而第二个项只有一个因子“y”。每个因子可以是一个简单的数,一个代数变量,也可以是放在括号里面的另一个表达式。对于最后一种情况,括号中的表达式称为“子表达式”;这里“x+3”就是一个子表达式。正则表达式的结构与数学表达式很相似。与数学表达式的“项”相对应,正则表达式由若干个“分支”构成,“分支”之间用符号“|”相连。从逻辑上讲,分支之间是一种“或”的关系,一个字符串只要与正则表达式中的任何一个分支相匹配,这个字符串就与整个正则表达式相匹配。比如,“第三人称代词”可以用正则表达式表示为“他|她|它|他们|她们|它们”。与数学表达式的“因子”相对应,构成正则表达式“分支”的部件称为“原子”。“原子”与“原子”之间没有任何符号相连。从逻辑上讲,原子之间是串接的关系,一个字符串必须与各个原子依次相匹配,才算与这个分支相匹配。比如在上面的例子中,分支“他们”由两个原子“他”和“们”组成。正则表达式的本质是它的“原子”可以有多种不同的形式。前面的例子是最简单的情形,即每个原子由一个普通字符组成。除此以外,“原子”还可以是特殊符号、通配符、字符集以及子表达式。2.1特殊符号可以作为特殊符号的原子有: 匹配行首。例如,“他”匹配出现在行首的“他”字。值得注意的是,这个符号仅仅表示“行首”这个位置,与它相匹配的字符串长度为0;$ 匹配行末。与“”相似,它仅表示“行末”这个位置。例如,“。$”匹配出现在行末的句号; 匹配词尾。词尾是指紧接在字母数字或下划线之后的第一个非字母数字下划线,任一汉字之后也属于词尾。词尾的匹配长度也是0;t TAB字符;2.2通配符通配符是用一个符号(或几个符号组合)来匹配某一类满足条件的字符。可以使用通配符来查找字符是正则表达式的一大特点。TextPro支持下列通配符(注意大小写的区别):以半角为主的部分:.(句点) 匹配任意半角或全角字符;a 匹配任意英文字母;a 匹配除字母外的任意半角或全角字符;d 匹配任意数字;d 匹配除数字外的任意半角或全角字符;h 匹配任意词首字符(字母及下划线);h 匹配除字母及下划线以外的任意字符;l 匹配任意小写字母;l 匹配除小写字母外的任意半角或全角字符;o 匹配任意八进制数字(0-7);o 匹配除八进制数字外的任意字符;p 匹配任意半角标点符号(非空格、字母、数字的可打印ASCII字符);p 匹配除半角标点以外的任意半角或全角字符;s 匹配任意空白字符(半角空格、TAB);s 匹配任意非空白的半角或全角字符;u匹配任意大写字母;u 匹配除大写字母外的任意半角或全角字符;w 匹配可成词的字符(字母、数字及下划线);w 匹配成词字符(字母、数字及下划线)外的任意半角或全角字符;x 匹配任意十六进制数字(0-9,a-f,A-F);x 匹配除十六进制数字外的任意半角或全角字符;以全角为主的部分:f 匹配除ASCII字符外的任意全角字符;f 匹配任意ASCII字符;A 匹配任意全角ASCII字符;b 匹配收录在BIG5码集中的任意字符;b 匹配未收录在BIG5码集中的任意字符;c 匹配任意汉字(不包括符号);c 匹配除汉字外的任意全角字符;D 匹配地支字符(子丑寅卯);g 匹配收录在GBK码集中的任意字符;g 匹配未收录在GBK码集中的任意字符;G 匹配大写希腊字母j 匹配日文片假名J 匹配日文平假名k 匹配小写希腊字母m 匹配数学符号;n 匹配中文数字(一二三四);N 匹配大写中文数字(壹贰叁肆);P 匹配全角标点符号;r 匹配小写俄文字母;R 匹配大写俄文字母;S 匹配罗马数字,带点、括号或圆圈的序号();T 匹配天干字符(甲乙丙丁);V 匹配竖排标点符号;y 匹配拼音字符;Y 匹配注音字符;Z 匹配制表字符;2.3字符集字符集是用一对方括号括起来的字符串,用以匹配字符集中的任何一个字符。比如“他她它”匹配单数任一第三人称代词“他”、“她”或“它”。如果方括号中的第一个字符是,则匹配除指定字符外的任何其它字符。例如“我+$”匹配没有“我”字的行。在字符集中,还可以用-表示字符的范围,例如“a-z”匹配任何小写字母。注意尽量不要用“-”表示汉字的范围,因为汉字并没有公认的次序,TextPro目前是依据汉字的Unicode编码来确定范围的。如果两个汉字的编码相差很大,将消耗大量的内存,运算也将非常缓慢。为了避免这种现象,TextPro中限制表示范围的起始与终止汉字必须位于Unicode编码的同一行(row)。如果字符集要包括字符“”、“”、“-”或“”,可以在这些字符前加“”。例如“xyz”匹配,x,y或z。另外需要特别指出的是,前面所述的特殊字符及通配符,除了t和e外,在字符集中均作为普通字符处理。字符集的匹配速度比通配符慢,所以应该尽可能地使用通配符。例如要查找半角数字时,应该使用d,而不要使用0-9,虽然后者也是正确的。 2.4子表达式子表达式是指用一对括弧()括起来的另外一个正则表达式。使用子表达式有两种主要的目的。一是改变匹配的优先级,例如“中|西文软件”匹配的是“中”或“西文软件”,但是“(中|西)文软件”匹配的是“中文软件”或“西文软件”。使用子表达式的另一个目的,是引用前面匹配到的内容。例如要查找形如“哈哈”、“嘻嘻”的叠字词,可以写“(c)1”。这里“(c)”匹配任意汉字,而“1”则引用匹配到的内容。TextPro允许在一个查找串包含最多9个子表达式,它们的匹配内容可以分别用“1”,“2”.“9”来加以引用。子表达式也可以嵌套另一个子表达式,子表达式左括号出现的序号为这个表达式的编号。另外需要注意的是,只能引用已经匹配了的表达式,象上面的例子不可以写成“1(c)”,同理,也不应该引用不同分支中的子表达式,因为一个正则表达式中只可能有一个分支被匹配。2.5重复指示符正则表达式的另外一个强大的功能是重复匹配的能力。前述的任何一种“原子”之后,都可以指定一个重复指示符。下面列出各种重复指示符:? 表示前一“原子”可有可无(重复0或1次)。例如“我们?”匹配“我”或“我们”;+ 表示前一“原子”至少匹配一次。例如“d+”匹配任何一个无符号整数;* 表示前一“前子”重复匹配0或多次。例如“hw*”表示许多高级语言对“变量”的定义:以字母或下划线开头,后接任意多个字母数字或下划线;n 表示前一“原子”重复匹配n次。例如“c啦3”匹配“哗啦啦啦”或“呼啦啦啦”等;n,m 表示前一“原子”重复匹配n至m次,其中nm,TextPro将自动交换m与n的值;n, 至少重复匹配n次,相当于n,无穷大;,m 至多重复匹配m次,相当于0,m; 重复任意多次,相当于*。在前面所述的各种重复指示符中,如果重复的次数不定,TextPro将匹配尽可能长的目标串(但最多不超过32767次,这是TextPro内设定的上限)。例如有一字符串“你好,我好,大家好”,表达式“你.*好”将匹配整个字符串,而不是“你好”或“你好,我好”。如果需要匹配尽可能短的目标串,可以采用前述的最后四种形式,并在“”之后加上“-”号。上例中的表达式如改为“你.-好”,则匹配串为“你好”。-n,m 重复匹配m至n次,匹配次数尽可能少;-n, 至少重复匹配n次,匹配次数尽可能少;-,m 至多重复匹配m次,匹配次数尽可能少,相当于-0,m;- 重复任意多次,类似于*,但匹配次数尽可能少。重复指示符只对紧邻在其前的“原子”起作用,例如“你好+”将匹配“你好”,“你好好”。但是不会匹配“你好你好”。如果要重复匹配一组原子,可以使用括号(子表达式),如“(你好)+”就会匹配“你好你好”。需要指出的是,重复指示符与引用子表达式具有不同的含义。重复指示符是重复“匹配”,至于匹配的内容则可以不同;而引用子表达式则是重复匹配的内容。例如,“d2”可以匹配任何一个两位数的整数,但是“(d)1”只能匹配“11”、“22”、“33”等数字相同两位数。当然,也可以重复引用子表达式,如“(d)1*”可以匹配“2”,“33”、“111”等各位数全同的整数。如前所述,在正则表达式中,以下字符“*?+.()”具有特殊的含义。如果需要查找这些字符本身,可以在该字符前加一个反斜杠“”。例如查“def”可以输入“def”。3. 替换表达式3.1特殊字符在进行替换时,也可以在替换串中使用一些特殊字符。目前TextPro支持的特殊字符有:n 插入回车符。可以用这个字符把某些行分成两行或多行;b 向前删除一个字符。当这个字符位于替换串之首时,将删除匹配串之前的一个字符。若匹配串位于行首,将使匹配串所在行与前一行相合并;d 向后删除一个字符。当这个字符位于替换串之末时,将删除匹配串之后的一个字符。若匹配串位于行末,将使匹配串所在行与下一行相合并;t 插入一个TAB字符;也可以在替换串中引用查找串中的匹配到的子表达式。引用方法也是用“1”、“2”等。另外还可以用“0”来引用整个匹配到的字符串。3.2替换函数在替换串中还可以使用一组替换函数,来对查找到的内容做某种变换。替换函数的形式是f.,其中“f”是函数名,它是一个半角英文字母。花括号中的内容是函数的参数。例如,ua表示把“a”转换为大写。目前TextPro支持三个替换函数,后继版本将逐步增加。u转换为大写l转换为小写U首字母大写Sxx替换表/功能S1, 第1个自定义替换表S2, 第2个自定义替换表.S30, 第30个自定义替换表SA, 简转繁SB, 繁转简SC, gbk转big5SD, big5转gbkSE, 转全角SF, 转半角SG, 删除半角字符SH, 括号嵌套转换SI, 竖排符号横转 替换函数的参数部分可以略去不写。如果略去,默认的参数是查找到的内容,即0。例如,要把文中所有英文单词的首字母大写,可以查找“”,并替换为“U0”,替换串也可以简写为“U”TextPro V6.5用此功能可实现自定义替换表进行二次正则替换,即可对查找到第n对匹配的内容使用第m个自定义替换表进行二次正则替换。例如查找:.*,替换为:S3即可对查找到的 之间的内容进行自定义替换表3的操作。再如查找:(.*)(.*),替换:1S62即可对查找到的第2组匹配.*之间的内容进行自定义替换表6的操作。4. 自定义替换表功能TextPro4.5以后提供了自定义替换表功能。所谓自定义替换,其实是一张替换表,它把某个字符串对应转换为另外一个字符串,比如把汉字转换为拼音。TextPro6将自定义替换与批量正则替换表合并在一起,增加了后者的数量并能保存,并增加了查找的选项。替换表是一个文本文件,它的每一行指定一个转换关系。行由两栏组成,栏与栏之间用分隔符半角等号“=”分开。第一栏是源字符串,第二栏是目标字符串。例如把汉字转为拼音的自定义替换表可以这样写中=zhong1国=guo2大=da4.如果替换表中要包含“=”,需要用“=”表示。如果替换表要包含“”,需要用“”表示。替换表准备好后,选择菜单“设置|自定义替换表”来设置替换表。TextPro6允许定义最多30张替换表(在正则表达式中可以使用前10张替换表)。首先选择一个位置,使那一行被选中,然后按“文件”按钮,即可装入这张替换表。点击“浏览”按钮可以查看指定的替换表。TextPro6统一处理自定义替换表和原来的正则替换表。所以在装入替换表后,应点击“选项”按钮设定替换表的选项。你也可以为这张替换表另起个名字,按“命名”按钮可以输入名称。“过滤”按钮与替换函数有关,等一下再作介绍。设置完以后,按“退出”钮结束。现在,选择菜单“编辑|自定义替换”,可以看到弹出的下级菜单中有一项功能被开启了,菜单项的名称就是刚才给替换表起的名称(如果没有起名称,默认的菜单名称是“自定义替换n”)。选择这项功能,将把出现在当前文件中的所有源串按替换表替换为目标串。在批处理中可以使用自定义替换功能。注意先设好替换表,不然选不到这个功能。 4.1 在查找替换中使用自定义替换表有的时候,上述简单的自定义替换功能是不够的。例如,用户可能希望只把出现在括号内的源串替换为目标串。这种文本处理可以通过在查找/替换中使用自定义替换表来解决。在查找/替换功能中使用自定义替换表的替换函数是Tn,其中n是0-9的数字,注意n为0表示第10张替换表。如果略去n,其效果相当于T1,即使用第一张替换表。例如要把所有放在方括号中的汉字替换为拼音,可以查找“(c)”,替换为“T1”。即把第一个子表达式的匹配内容按自定义替换表转换。注意,如果T函数的参数不在替换表的源串中,T函数的结果与源串相同,即不做任何变换。有些情况下,用户可能希望只使用替换表的一部分内容。还是以拼音为例,前面给出的替换表中包含了拼音的音调,如果在替换时不希望加上这些音调数字,可以使用“过滤”功能。所谓过滤,其实是用一个正则表达式去分析替换表的目标串,并把其中的某个子表达式取出来。使用“过滤”时,在“设置自定义替换表”对话框中,点“过滤”按钮,在弹出的对话框中填入一个正则表达式。再以拼音为例,表达式可以写为“(a+)(d?)”,其中第一对括号中的是不含音调的拼音,第二对括号是音调。在调用T函数时,TextPro会在目标串中查找这个正则表达式。但是如何把其中的子表达式取出来呢?T函数还有一个可选的下标,取第n个子表达式的值就写作T.n。所以,把放在方括号中的汉字替换为不带调的拼音,可以查找“(c)”,替换为“T11” 5. 应用举例(一)例一:要在文本文件中增加段间空行操作办法:用替换功能,在“查找”中输入“$”,在替换中输入“n”。分析:“$”匹配行末;在替换时输入“n”,表示换行。即在段末位置后增加一个空行。例二:在TextPro的制作过程中,我们需要整理许多资料。例如简转繁的资料是一个文本文件,每行两个汉字,前一个为简体字,后一个为繁体字。但是有不少行简繁体其实是同一个字,我们希望将其剔除。操作办法:用替换功能,在“查找”中输入“(c)1”,在替换中输入“d”。分析:“c”匹配任一汉字,“1”是引用子表达式,因此上面的正则表达式表示查找连续两个相同的汉字。在替换时输入“d”,道理同上。例三:某文件由一些有用的资料及注释组成。注释单独成行,并以“#”开头。现在希望将所有的注释行删除。操作办法:用替换功能,在“查找”中输入“#.*$”,在替换在输入“d”。分析:匹配行首,#表示行首有符号#,.*匹配#之后的所有字符,直到行末($)。这个表达式将整行匹配所有以#开头的行。替换成“d”将把这些行清除。例四:有一个从“输入法生成器”反编译出来的拼音表,其中有单字的拼音,也有词组的拼音。现在希望把单字的拼音和词组的拼音分开。已经文件的格式是每行一个字或词组,行首是汉字或词组,其后紧跟拼音。操作办法:用替换功能,查找“cc+f+”,替换为“d”,就得到了一份单字的拼音表,另存为“单字.txt”后,按Ctrl+Z(UNDO)撤消刚才的操作,再用替换功能,查找“cf+”,替换为“d”,就得到了词组的拼音表,可另存为“词组.txt”。分析:“cc+f+”匹配行首以汉字开头,跟着一个以上的汉字,再跟着一个以上任意半角字符的行,也就是所有的词组行,替换为“d”把这些行删除,得到的是单字的拼音表;“cf+”匹配以一个汉字开头,紧跟着一个以上任意半角字符,这些正好是单字的拼音行,删除后即得词组的拼音表。 5.1 应用举例(二) 例五:将一本辞典编为电子辞典的过程中需要将词条的页码加上。例如:【有】瑜伽九十七卷十一頁云:又住於此,若生,若長,能生後際所有諸苦;說名為有需要在【有】后面加上这个词条出现的页码。变成“【有】p0534 ”这时正好辞典的目录页有词条的页码可供利用。我们可用自定义替换表来解决这个问题。操作办法:1、先将目录文件做成词条在前,空格后接页码的如下格式:【有為】=p0535【有法】=p0535【有情】=p0535【有色】=p05362、在“设置|自定义替换表”中设置为第n张表,此处假定为第6张表。3、在辞典文件中查找“(【c+】)”,替换成“0T61”,即可做成达成如下目标文件格式:【有】p0534瑜伽九十七卷十一頁云:又住於此,若生,若長,能生後際所有諸苦;說名為有分析:“(【c+】)”是用括号表示的一个汉字以上的词条;0是重写词条,上例中是【有】;T61是用上述第6张替换表替换查找到的词条,即用页码替换词条,上例即是用p0534替换了【有】,最后的替换结果为“【有】p0534”。例六:汉字注拼音有一份文本,现在要给每个汉字注上拼音,格式为中(zhong阴平)国(guo阳平)人(ren阳平).我们可能用自定义替换来解决这个问题。需要用到两张自定义替换表。第一张是“拼音表.txt”,其内容和格式为中=zhong1国=guo2人=ren2.另一张表是“音调表.txt”,内容一共5行:1=阴平2=阳平3=上声4=去声5=轻声在“设置自定义替换表”中,把“拼音表.txt”设为第一张替换表,并输入“过滤”表达式“(a+)(d)”,表示一位以上的字母后跟一位数字;再把“音调表.txt”设置为第二张替换表。好了,现在查找“c”,替换为“0(T1T2T2)”即可完成注音工作。分析:1、替换串的第一个“0”表示把这个汉字再写一遍(举第一行的“中”字为例);2、括号里的“T1”相当于“T101”,它从第一张表中查找匹配到的汉字,并把对应的拼音用过滤表达式做一次查找,取查找结果的第一个子表达式,即(a+)部分(上例中为“zhong”);3、“T2T2”是一个嵌套的替换函数调用,内层的“T2”是取第一张表的过滤表达式第二个子表达式的音调数字,即(d)部分(上例中为“1”),然后再以这个音调数字为参数,查找第二张替换表,得到该音调的中文表示,上例中为“阴平”。4、综合以上三步,查找替换的结果为可如“中(zhong阴平)国(guo阳平)人(ren阳平).”。5.2 应用举例(二)例六、如何在TextPro中将文本转为简单表格应“黑水”群友的要求,我测试了一下是否能用TextPro将输入好的文本转成用制表符表示的简单表格,结果是基本上令人满意的。现以“黑水”群友提供的一个一段文本为例来说明整个过程:、以下是一段要求转为表格的文本(要求全部用全角录入文字和空格):=白虎六合太阴惊门己开门庚休门丙天柱壬天心乙天蓬丁玄武
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新解读《GB-T 31201-2014复合肥(缓控释)生产成套设备》
- 进口煤合同范本
- 特质车辆加油合同范本
- 展会样品购销合同范本
- 网上合同范本怎么
- 劳务合同范本图库
- 丽江庭院租赁合同范本
- 合股经营钢材合同范本
- 田螺回收合同范本
- 装修质量保障合同范本
- 出口食品销售合同范本
- 2025河北雄安新区招聘应急管理综合行政执法技术检查员10人考试备考题库及答案解析
- 2025北师大版(2024)三年级上册数学教学计划
- 2025云南省腾冲市边防办招聘边境专职联防员(10人)笔试参考题库附答案解析
- 中职乐理课教学课件
- 中小会计师所发展困境及对策
- 支气管哮喘急性发作课件
- 2025-2026学年人教鄂教版(2017)小学科学六年级上册教学计划及进度表
- 心理委员基本知识培训课件
- 盆底肌电重塑机制-洞察及研究
- 2025年工会基础知识考试题库(含答案)
评论
0/150
提交评论