好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

利用正则表达式进行查找 _ 换替.pdf

5页
  • 卖家[上传人]:wm****3
  • 文档编号:46471777
  • 上传时间:2018-06-26
  • 文档格式:PDF
  • 文档大小:1.63MB
  • / 5 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 利用正则表达式进行查找/ 替换翟自洋1 , 2 ) 林昌东1 , 2 )  收稿日期: 2 0 0 7  1 0  1 5 修回日期: 2 0 0 8  0 8  2 91 )《 浙江大学学报( 英文版) 》 编辑部, 3 1 0 0 2 7 杭州市浙大路 3 8号,E  m a i l :j z u s _ z z y @z j u . e d u . c n2 )浙江大学出版社, 3 1 0 0 2 8 杭州市天目山路 1 4 8号摘 要 查找/ 替换在文本编辑中常会用到, 看似简单, 实则内涵丰富正则表达式( R e g u l a r E x p r e s s i o n ) 的采用, 实现了对复杂文本的匹配, 极大地增强了查找/ 替换的功能正则表达式与文本编辑软件( 如 E m E d i t o rT M等) 所支持的“ 在多个文件中查找/ 替换” 相结合, 使编辑人员可对各种纯文本文档( 如 t x t , x m l , t e x , h t m , 等) 同时进行批量查找/ 替换, 大大提高了工作效率本文从笔者编辑工作的典型实例出发, 简要介绍了正则表达式的基本概念, 部分展现了其应用于查找/ 替换的巨大潜力。

      指出结合正则表达式的查找/ 替换还可用于数据验证, 作为人工审校的补充针对英文期刊总结了一些验证表达式并指出, 对中文或中英文混排的书刊同样大有用武之地关键词 查找/ 替换 正则表达式( R e g u l a r E x p r e s s i o n ) 在多个文件中查找/ 替换 数据验证 E m E d i t o rT M查找/ 替换( 以下简称“ 查/ 替” ) 是编辑软件的一项基本功能一般编辑软件只能处理简单的查/ 替, 但目前越来越多的编辑软件在查/ 替功能中实现了正则表达式( R e g u l a rE x p r e s s i o n ) , 其内涵丰富, 功能极为强大, 可使一些烦琐费时且容易出错的工作变得轻松有趣笔者在将《 浙江大学学报( 英文版) 》 B辑的 Wo r d文档转换成 x m l 文件, 提交 P u b M e dC e n t r a l 数据库[ 1 ]时, 被查出一个全局性的问题: 公式编号( 1 ) , ( 2 ) , ……误为 1 , 2 , ……括号全部漏掉总共 1 5期数据、 2 6 0多篇文档, 如果手工逐一修改, 至少得花几个小时, 并且极可能错漏。

      x m l 文件中, 与公式编号相对应的内容为:<l a b e l >1</ l a b e l > , < l a b e l > 2</ l a b e l > , ……正确的应为 <l a b e l >( 1 )</ l a b e l > , <l a b e l >( 2 )</ l a b e l > , ……如果在编辑软件中直接将前者对应地替换为后者, 公式编号的问题是解决了, 但同时又引入了新的错误因为公式以外也有 <l a b e l >1</ l a b e l > , …… 出现, 例如作者单位 < a f f i d = " a f f 1 ">< l a b e l > 1</ l a b e l > . . . </ a f f > 中的 1不能改为( 1 ) !利用正则表达式, 以及某些文本编辑软件( 如 E m u r a s o f t公司的 E m E d i t o rT M) 支持的“ 在多个文件中查找/ 替换” 功能,可以准确、 快速地解决这一问题1 正则表达式简介D O S 命令中用通配符( Wi l d c a r dC h a r a c t e r ) “ ? ” 和“ ” 分别表示任意单个字符和任意字符串, 例如命令“ d i r . d o c ”将列出当前目录下所有 Wo r d 文档。

      这两个符号可看作正则表达式最简单的子集M i c r o s o f t Wo r d定义了一套通配符, 在其帮助文件给出了说明[ 2 ]对通配符的支持使得 Wo r d的查/ 替功能大大增强但 Wo r d 所支持的通配符同样只是完整正则表达式体系的一个小的子集限于篇幅, 这里只对正则表达式作简要介绍, 以文本编辑软件 E m E d i t o r 采用的正则表达式体系为例更详尽地了解正则表达式, 请参见文献[ 3 , 4 , 5 ] 正 则 表 达 式 是 由 普 通 字 符 ( L i t e r a l s )和 元 字 符( M e t a c h a r a c t e r s ) 构成的文本模式元字符表示特殊的含义,包括“ \ ” , “ ^ ” , “?” , “ ” , “+ ” , “ ? ” , “ . ” , “ ( ” , “ ) ” , “ { ” ,“ } ” , “ [ ” , “ ] ” 和“ | ” 元字符前加“ \ ” 转义为符号自身元字符均为半角字符普通字符是除元字符外的所有字符,普通字符只匹配自身[ 6 ]表 1[ 6 ]列出了元字符的含义, 其中包括三组括号( 分别成对出现) 构成的常用组合, 同时给出简单示例。

      正则表达式的语法初看上去复杂, 其实理解起来不难, 并不需要专门的计算机知识构造正则表达式, 就是将元字符与普通字符通过各种方式结合在一起, 得到需要的匹配或捕获如果把构造正则表达式比作创建数学表达式, 元字符就相当于加减乘除等运算符号字符的结合存在先后法则元字符的优先级从高到—221—h t t p : / / z g k j q k y j . p e r i o d i c a l s . n e t . c n / 中国科技期刊研究, 2 0 0 9 , 2 0 ( 1 )国家自然科学基金重点学术期刊资助项目( N o . 3 0 8 2 4 8 0 2 )通讯作者: 3 1 0 0 2 8 杭州市天目山路 1 4 8号,E  m a i l : l c d @z j u . e d u . c n表 1 正则表达式中元字符的含义①元字符含义\转义正则表达式中最重要、 最常用的字符所谓转义, 就是改变紧跟其后的字符( 普通字符或元字符, 只能是半角字符) 的本来意义, 并与后一字符一起构成特殊字符、 原义字符或反向引用②例如, “ \ n ” 匹配换行符; “ \ \ ” 匹配“ \ ” ; \ 1~\ 9表示反向引用^匹配输入字符串的开始位置。

      例如, “ ^ e ” 匹配任何以 e 起始的字符串中打头的 e?匹配输入字符串的结束位置例如, “ e ?” 匹配任何以 e 结束的字符串中末尾的 e{ n }匹配前面的子表达式 n 次, n 为非负整数{ n , }至少匹配前面的子表达式 n 次, n 为非负整数{ m , n }至少匹配前面的子表达式 m次且至多匹配 n 次, m和 n 均为非负整数, m<= n 逗号和两个数字之间不能有空格匹配前面的子表达式零次或多次等价于{ 0 , }+匹配前面的子表达式一次或多次等价于 { 1 , }?匹配前面的子表达式零次或一次等价于 { 0 , 1 }?非贪婪模式跟在限制符— — —,+ ,? ,{ n } ,{ n , } ,{ m , n } — — —之后, 尽可能少地匹配所搜索的字符串; 而默认的贪婪模式则尽可能多地匹配所搜索的字符串例如, 对于字符串 o o o o , “ o + ? ” 将匹配单个 o , 而“ o + ” 将匹配所有 o.匹配除“ \ n ” 以外的任何单个字符( 包括可见和不可见字符)( p a t t e r n )分组捕获匹配 p a t t e r n并获取这一匹配供以后引用。

      捕获的分组可供反向引用( ? : p a t t e r n )非捕获匹配, 表示限定常与“ | ” 组合使用, 例如, “ i n d u s t r ( ? : y | i e s ) ” 比“ i n d u s t r y | i n d u s t r i e s ” 更简略( ? = p a t t e r n )正限定, 在任何匹配 p a t t e r n的字符串之前匹配待查找的字符串, 为非捕获匹配例如,“ x ( ? = a b c ) ” 只匹配在“ a b c ” 之前出现的 x( ? !p a t t e r n )负限定, 在不匹配 p a t t e r n的字符串之前匹配待查找的字符串, 为非捕获匹配例如, “ x ( ? !a b c )” 匹配不在“ a b c ” 之前出现的 xx | y匹配 x 或 y 例如, “ z | f o o d ” 匹配“ z ” 或“ f o o d ” , “ ( z | f ) o o d ” 则匹配“ z o o d ” 或“ f o o d ”[ x y z ]字符集合匹配包含的任意一个字符例如, “ [ a b c ] ” 可以匹配“ p l a i n ” 中的“ a ”[ ^ x y z ]匹配未包含的任意字符。

      例如“ [ ^ a b c ] ” 可以匹配“ p l a i n ” 中的“ p ” , “ l ” , “ i ” , “ n ”[ x - y ]字符范围匹配指定范围内的任意字符例如, “ [ a - z ] ” 匹配“ a ” 到“ z ” 的任意小写字母[ ^ x - y ]匹配不在指定范围内的任意字符例如, “ [ ^ a - z ] ” 匹配除了 2 6个小写字母以外的任意字符注:①译自 E m E d i t o r V 5 . 0 0帮助文件[ 6 ], 有删改②反向引用( b a c kr e f e r e n c e ) 标识由正则表达式中的匹配组捕获的子字符串, 由转义字符“ \ ” 与数字 1~ 9构成; 引用时, 从左至右,分别对应于\ 1 , \ 2 , ……, \ 9 例如, “ ( a ) \ 1 ” 捕获“ a ” 作为第一个反向引用, 同时匹配“ a a ” 反向引用也常用于替换表达式例如,“ ( h ) ( e ) ” 找到“ h e ” , 替换表达式若为“ \ 1 ” , 则将“ h e ” 替换为“ h ” ; 若为“ \ 2 \ 1 ” , 则替换为“ e h ”低为[ 4 ]: 转义符— — —\ ; 括号和中括号— — —( ) , ( ? : ) , ( ?=) ,[ ] ; 限定符— — —,+ , ? , { n } , { n , } , { m , n } ; 定位点和序列— — —^ ,?, \ 任意元字符, 任意字符; 替换— — — | 。

      相同优先级从左到右, 不同优先级先高后低为便于使用, 某些普通字符和元字符一起构成具有特定含义的组合, 这种组合往往作为构造正则表达式的基本组件例如, 下面要提到的字符集( C h a r a c t e r C l a s s e s ) 、 表示单个字符及字符集的转义序列( E s c a p eS e q u e n c e s ) 等借助数学表达式来理解: 表达式 a2+ b2中的 a2, 由字母 a ( 相当于正则表达式的普通字符) 和平方运算( 相当于元字符) 构成, 但通常将 a2视为一个整体字符集( C h a r a c t e r C l a s s e s )由小写字母和元字符“ [ ” “ ] ” 构成, 使用格式为“ [ :c l a s s n a m e : ] ” , 包含全角和半角字符这里“ c l a s s n a m e ” 可以—321—h t t p : / / z g k j q k y j . p e r i o d i c a l s . n e t . c n / 中国科技期刊研究, 2 0 0 9 , 2 0 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.