zoukankan      html  css  js  c++  java
  • 正则表达式小试牛刀

    闲来无事,打开以前找工作时打印出的资料,说面试官怎么考正则表达式呢?

    实际问题
    比如你进了我们组工作,我们组老大对代码的格式要求很严格,要求左右小括号前后都有空格(仅仅举例)。
    那么我给你一些源代码(c/c++,java),你来检测并修正这些不合规则的代码,你有两天时间,你怎么做?
    简单说,下面(1)是给你的输入(foo.c), (2)是正确的输出。

    (1)  foo (bar ( new Point(x, graph.getY()) ));
    (2)  foo ( bar ( new Point ( x, graph.getY ( ) ) ) ) ;

    答案:
    一条sed命令即可搞定

    1 sed -i -r "s/([^ ])([(|)])/ 1 2/g
    2            s/([(|)])([^ ])/1 2/g" foo.c
    3 
    4 或者放一行(不建议)
    5 sed -i -r  "s/([^ ])([(|)])/1 2/g;s/([(|)])([^ ])/1 2/g" foo.c

    解释:
      sed - 按行处理文件的文字处理工具
       -i - (in place) 替换文件本身
       -r - (regexp-extended) 使用扩展的正则表达式
       () - 分组
       [^abc] - 除a,b,c集合以外的一个字符
       1 - 引用分组, 依次到9
       g - (global)对每一行找到的匹配全部替换
       a|b - 或运算符,匹配两个字符中的一个

    补充说明:

    看了资料上给的"标准"答案:
    1. 使用Unix命令如sed(利用正则表达式)
    2. 其他的编辑器,利用正则表达式替换
    3. 快速写一个ruby脚本
    4. 找个IDE,格式化一下
    任何一种方法,面试者都要解释清楚怎么做的才行。
    例如在vim里面,可以通过两次替换做到(需要注意,()是字符, ()才是正则表达语法, []|都是相同):
              :%s:([(|)])([^ ]):1 2:g
              :%s:([^ ])([(|)]):1 2:g

    更多更全面的正则表达式介绍可以参考博文:
    1. 正则表达式

  • 相关阅读:
    提出的问题
    2020软件工程作业02
    2020软件工程作业01
    我当社畜这些年-1
    Electron-vue实现后台多进程(二)
    Electron-vue实现后台多进程(一)
    pytorch自定义loss函数的几种方法
    XGBoost原理
    transformers的bert预训练模型的返回值简要描述
    sklearn下的ROC与AUC原理详解
  • 原文地址:https://www.cnblogs.com/xianzhon/p/6246734.html
Copyright © 2011-2022 走看看