zoukankan      html  css  js  c++  java
  • 文本批量替换的正则表达式

    1、去掉第三世第十三世之类的前缀:
    ^(第)(w{1,})(世)($|W|s)

    2、去掉行首名字加公的“公”字
    ^(w)(公,)

    3、去掉某某公之子的“公”字
    (Ww.?)(公)(w子W)
    替换为:13

    4、把“名字+字什么号什么+某某之子”调为“名字+某之子”的顺序
    查找:(abcw.*W)(w.*W)(w.?公w子)(W)
    替换为:13,2

    5、去掉“名字+,+见后”
    ^(w{1,},)(见后)

    6、替换适前后斜杠正则表达式
    (/)(w{0,})(适)(w{0,})(/)
    234

    7、删掉见后无用记录行
    ^(w{1,})(,)(见后)(W|)

    8、删除空行
    ^(s*)

    9、提取某某子放名字后
    ^(w{1,2}W)(w.*)(W)(w{1,3}子,)
    1423



    文本内容为:
    境界面(BOUNT)  
    兴趣面(POINT)  
    兴趣点(POIPT)  
    交通线(TRALK)

    其中“境界面”、“兴趣面”等中文部分为图层名称,BOUNT、POINT等英文部分为图层别名。
    希望通过替换后的文本内容为:
    *BOUNT,境界面,面  
    *POINT,兴趣面,面  
    *POIPT,兴趣点,点  
    *TRALK,交通线,线  

    即,将原来的“中文名(英文名)”的格式修改为“*英文名,中文名,图层类型”的格式,且图层类型来源为中文图层名的最后一个字。
    使用的正则表达式为:
    ^(.+?)([点线面]{1})(([A-Z]+))
    分组打包:
    第一组:^(.+?)
    第二组:([点线面]{1})
    第三组:(([A-Z]+))

    表达式说明:
        “^”匹配输入字符串的开始位置,即本例中的一整行文本;
        第一个括号中的内容“.+?”匹配除换行符“ ”之外的任意一个字符,如本例中的“境”部分;
        第二个括号中的内容匹配的是在“点、线、面”集合中的一个字符,如本例中的“面”;
        第三个括号中的内容匹配的是大写的A-Z字符部分。
        
    被替换为:
    3,12,2  
    说明:$后跟序号N(如:$3),表示取到结果集中的第N条记录。其中第0条记录为完整的结果本身,第1条起为表达式括号中的内容。
    调整组序:
    3 公式得到的第三组内容调整到最前
    12 公式得到的第一组内容和第二组内容其后
    2 公式得到的第二组内容在最后
    注意:3,和2, 后边的标点符号是在原文后加逗号。而原文中的()没有保留。


    等价是等同于的意思,表示同样的功能,用不同符号来书写。

    ?,*,+,d,w 都是等价字符
      ?等价于匹配长度{0,1}
      *等价于匹配长度{0,}?
      +等价于匹配长度{1,}
      d等价于[0-9]

    D等价于[^0-9]
      w等价于[A-Za-z_0-9]

    W等价于[^A-Za-z_0-9]。

    常用运算符与表达式:
      ^ 开始
      () 域段
      [] 包含,默认是一个字符长度
      [^] 不包含,默认是一个字符长度
      {n,m} 匹配长度?
      . 任何单个字符(. 字符点)
      | 或
       转义
      $ 结尾
      [A-Z] 26个大写字母
      [a-z] 26个小写字母
      [0-9] 0至9数字


    我的手机 2018-02-07 16:29:13
    常用运算符与表达式:
      ^ 开始
      () 域段
      [] 包含,默认是一个字符长度
      [^] 不包含,默认是一个字符长度
      {n,m} 匹配长度?
      . 任何单个字符(. 字符点)
      | 或
       转义
      $ 结尾
      [A-Z] 26个大写字母
      [a-z] 26个小写字母
      [0-9] 0至9数字

    [A-Za-z0-9] 26个大写字母、26个小写字母和0至9数字
      , 分割
      .
      
      分割语法:
      [A,H,T,W] 包含A或H或T或W字母
      [a,h,t,w] 包含a或h或t或w字母
      [0,3,6,8] 包含0或3或6或8数字


      语法与释义:
      基础语法 "^([]{})([]{})([]{})$"
      正则字符串 = "开始([包含内容]{长度})([包含内容]{长度})([包含内容]{长度})结束"?
      
      ?,*,+,d,w 这些都是简写的,完全可以用[]和{}代替,在(?(?=)(?!)(?<=)(?<!)(?i)(*?)(+?)这种特殊组合情况下除外。
      初学者可以忽略?,*,+,d,w一些简写标示符,学会了基础使用再按表自己去等价替换


      
      实例:
      字符串;tel:086-0666-88810009999
      原始正则:"^tel:[0-9]{1,3}-[0][0-9]{2,3}-[0-9]{8,11}$"?
      速记理解:开始 "tel:普通文本"[0-9数字]{1至3位}"-普通文本"[0数字][0-9数字]{2至3位}"-普通文本"[0-9数字]{8至11位} 结束"
      等价简写后正则写法:"^tel:d{1,3}-[0]d{2,3}-d{8,11}$" ,简写语法不是所有语言都支持。

    应用实例

    【1】正则表达式应用——替换指定内容到行尾

    原始文本如下面两行

    abc aaaaa

    123 abc 444

    希望每次遇到“abc”,则替换“abc”以及其后到行尾的内容为“abc efg”

    即上面的文本最终替换为:

    abc efg

    123 abc efg

    解决:

    ① 在替换对话框,查找内容里输入“abc.*”,替换内容输入为“abc efg”
    ② 同时勾选“正则表达式”复选框,然后点击“全部替换”按钮
    其中,符号的含义如下:
    “.” =匹配任意字符
    “*” =匹配0次或更多

    注意:其实就是正则表达式替换,这里只是把一些曾经提出的问题加以整理,单纯从正则表达式本身来说,就可以引申出成千上万种特例。


    正则表达式中的转义字符:通过“”作为前缀:
    o          NUL字符(u0000)
                制表符(u0009)
                换行符(u000A)
    v            垂直制表符(u000B)
    f             换页符(u000C)
                 回车符(u000D)
    xnn        由十六进制数nn指定的拉丁字符
    uxxxx     由十六进制xxxx指定的Unicode字符
    cX          控制字符^X
    实例:
    function zyzf() {
                var text = "zy zf";
                var reg = new RegExp("\r", "g");
                alert(reg.test(text));
            }
    <input id="Button9" type="button" value="转义字符匹配" onclick="zyzf()"  />

    正则表达式中特殊标点符号:^ $  . * + ?= ! : | / ( ) [ ] { }(如果要在正则表达式使用这些直接量则要在前面加“”)
    [^]:否定字符类,不包括在后面的匹配。
    function tsbds()        {
                var text = "tieshubiaodianpipei";
                var reg = new RegExp("^ti", "g");
                alert(reg.exec(text));
            }
    $:以什么的结尾。
    . :除了换行符和unicode行终止符之外的所有字符。
    []:方括号里面的任意字符匹配。
    例如:
    var reg=new RegExp("[abc]","g");的含义和“a”“b”“c”中的任何一个匹配。

    正则表达式中的字符类
    w :任何ASCII字符组成的字母数字,等级于[a-zA-Z0-9]
    W:任何不是ASCII字符组成的字母数字,等级于[^a-zA-Z0-9]
    s :任何Unicode的空白字符
    S: 任何非Unicode的空白字符
    d: 任何ASCII数字,等价于[0-9]
    D:出ASCII数字之外的任何字符,等价于[^0-9]
    []:退格直接量(特例)
    实例:寻找字符串中的所以数字
    function tsbds()        {
                var text = "ties2hubi3aodia2424npip242ei";
                var reg = new RegExp("\d", "g");
                alert(text.match(reg));
            }
    <input id="Button10" type="button" value="特殊标点匹配" onclick="tsbds()"  />

    正则表达式中重复用法:
    {n,m}     匹配前一项至少n次,但是不超过m次
    {n,}        匹配前一项n次或者更多次
    {n}         匹配前一项n次
    ?          匹配前一项0次或者1次,等价于{0,1}
    +           匹配前一项一次或者多次,等价于{1,}
    *            匹配前一项0次或者多次,等价于{0,}
    实例:找出数字组合
    function tsbds()        {
                var text = "ties2hubi3aodia2424npip242ei";
                var reg = new RegExp("\d+", "g");
                alert(text.match(reg));
            }
    <input id="Button10" type="button" value="特殊标点匹配" onclick="tsbds()"  />

    正则表达式匹配之非贪婪的匹配,只需要在待匹配的字符后面跟一个问号即可。
    如我们看看/a+?/的匹配结果吧。
    function tsbds()        {            var text = "tieaaaas2hubi3aodia2424npip242ei";            var reg = new RegExp("a+?", "g");            alert(text.match(reg));        }
    <input id="Button10" type="button" value="特殊标点匹配" onclick="tsbds()"  />

    正则表达式之分组、选择和引用
    |  分割供选择的字符,如/ab|cd|ef/可以匹配“ab”或“cd”或者“ef”(从左到右的匹配,左边匹配了就忽略右边的如/a|ab/遇到ab职匹配第一个)
    ()  将几个项组合成一个单元。
    例如:
    function tsbds()        {
                var text = "tiABCeaaaaSs2hubAi3aDodAia2424npBip24C2ei";
                var reg = new RegExp("ab|bc|de", "gi");
                alert(text.match(reg));
            }
    <input id="Button10" type="button" value="特殊标点匹配" onclick="tsbds()"  />

    正则表达式的修饰符
    i   :执行不区分大小写的匹配
    g  :找到所有的匹配
    m :多行匹配模式
    实例匹配所有的全局配置字母abc(不区分大小写)
    function tsbds()        {
                var text = "tiABCeaaaaSs2hubAi3aDodAia2424npBip24C2ei";
                var reg = new RegExp("[abc]", "gi");
                alert(text.match(reg));
            }
    <input id="Button10" type="button" value="特殊标点匹配" onclick="tsbds()"  />

    例子:
    原文是“礼火,字继定,高中,明月扶子,相平公之子,生于一八八二年正月十七日子时。娶杨某某长女,生于年月日子时。”
    要求:
    1、"娶...长女",改为“娶...女为妻”这种格式以避免调整第一种顺序时引起凡是...子|女,都移动到第二句的问题。


    1的公式:
    查找公式:(娶.+?女)W   //最小化筛选,不会把标点或“娶松门卫参军徽郡汪赞皇公女,生一女,”中的“汪赞皇公女,生一女”筛选进来。
                                           //后面加个参数W起判断标点作用,以防把“生一女”这样的内容也选中。
                      (娶.*女)(!?为妻)   //但遇到“娶松门卫参军徽郡汪赞皇公女,生一女,”会把“生一女”也包括进去。
    替换公式:1为妻
    执行结果:能够判断,看原句中有无为妻二字,如果没有则添加“为妻”二字,如已经有则不再重复添加。
                      会误选“娶朱氏,生于道光十三年卒失,续娶王氏生失,出二女”。

    同理:AA,抚某某之子,某某继子,这二句有语法表达上的冲突。
    公式:(抚.+?子)
    替换:1入继
    效果:AA,抚某某之子入继,某某之子

    2、把“,相古公之子”调整到第二句,即:“礼火,相古公之子”
    2的公式:字号后移,内容调序
    例子内容:
    小青,字清清,号木青,王老汉三女。适张村小李,出二女,长女待字次适谢。
    小青,字清清,号木青,王老汉继女。适张村小李,出二女,长女待字次适谢。
    小青,字清清,号木青,王老汉长女。适张村小李,出二女,长女待字次适谢。
    小青,字清清,号木青,王老汉三女。适张村小李,出二女,长女待字次适谢。
    小青,字清清,号木青,王老汉二女。适张村小李,出二女,长女待字次适谢。
    小青,字清清,号木青,王老汉次女。适张村小李,出二女,长女待字次适谢。
    小青,字清清,号木青,王老汉养女。适张村小李,出二女,长女待字次适谢。
    查找公式:^(.+?W)(w.*)W(w*子|w*女)W
                     或:^(w.+?W)(w.*)W(w.*?子|w.*?女)W
    替换公式:13,2,
    小青,出二女,字清清,号木青,王老汉三女。适张村小李长女待字次适谢。
    没有达到想要的目的。王老汉三女位置没动。
    执行结果:能达到调整顺序目的,但会把以“子|女”结束的内容都调序到前边,如“娶..女,”,“字明子,”等
    解决办法:
    ^(w.+?W)(.+?)(w+?子|w+?女)W
    13,2
    效果:
    小青,王老汉三女,字清清,号木青,适张村小李,出二女,长女待字次适谢。
    小青,王老汉继女,字清清,号木青,适张村小李,出二女,长女待字次适谢。
    小青,王老汉长女,字清清,号木青,适张村小李,出二女,长女待字次适谢。
    小青,王老汉三女,字清清,号木青,适张村小李,出二女,长女待字次适谢。
    小青,王老汉二女,字清清,号木青,适张村小李,出二女,长女待字次适谢。
    小青,王老汉次女,字清清,号木青,适张村小李,出二女,长女待字次适谢。
    小青,王老汉养女,字清清,号木青,适张村小李,出二女,长女待字次适谢。

    公式1在公式2之后执行。解决原文中"明月扶子,相古公之子,"子时等多个子或女信息时,也用这种方法。

    对原文减少信息来测试一下(一个去掉字,一个去掉字和号):
    小青,王老汉长女,字清清,适张村小李,出二女,长女待字次适谢。
    小青,王老汉三女,字清清,号木青,适张村小李,出二女,长女待字次适谢。
    小青,王老汉二女,适张村小李,出二女,长女待字次适谢。

    结果:信息最少的那句王老汉的王字错位了。
    小青,王老汉三女,号木青,适张村小李,出二女,长女待字次适谢。
    小青,王老汉继女,字清清,适张村小李,出二女,长女待字次适谢。
    小青,老汉长女,王适张村小李,出二女,长女待字次适谢。
    小青,王老汉三女,字清清,号木青,适张村小李,出二女,长女待字次适谢。

    去掉多余的“公”字
       查找公式:(Ww{1,2})(公)(.?[子|女])(W)
       替换公式:134
    例子:
    继平,相华公三子,字公然。
    继直,守中公之子。继直公续娶赵家女为妻
    堃信,守和公之女
    不会替换“字公然”或“继直公续娶赵家女为妻”中的公字

    </?(?!br|p|img|strong|/strong|div|table|tr|td|span)[^>]*>

    去除word生成网页时产生的冗码
    </?(?!/b|b|br|img|strong|/strong|div|table|tr|td)[^>]*>

    ^((?!我们).)*

    ^(d{1,2})(.)(s{1,2})
    删除每行行首的数字序号编码的正则表达式,如:
    1.        <style type="text/css">
    2.        <!--
    3.        #kw2 {font:13px Verdana; height:22px; 50px;}
    4.        #sb {height:25px;5.6em}
    5.        #bg{background-repeat:repeat-x}
    6.        -->
    7.        </style>

  • 相关阅读:
    【数据结构】线性表&&顺序表详解和代码实例
    【智能算法】超详细的遗传算法(Genetic Algorithm)解析和TSP求解代码详解
    【智能算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题 (TSP, Traveling Salesman Problem)
    【智能算法】迭代局部搜索(Iterated Local Search, ILS)详解
    10. js时间格式转换
    2. 解决svn working copy locked问题
    1. easyui tree 初始化的两种方式
    10. js截取最后一个斜杠后面的字符串
    2. apache整合tomcat部署集群
    1. apache如何启动
  • 原文地址:https://www.cnblogs.com/yuanscn/p/10931917.html
Copyright © 2011-2022 走看看