zoukankan      html  css  js  c++  java
  • 使用正则表达式做代码匹配和替换

    转载请注明:

    仰望高端玩家的小清新 http://www.cnblogs.com/luruiyuan/

    这篇博客主要在于记录一些不常见的有用的细节,对于网上随处可见的正则规则表,以及有限状态机这类基本概念,不在这篇博客的考虑范围之内。

    正则搜索:

    以下搜索和替换基于VSCode

    在正则搜索模式下,我们可以使用$+数字的方式获取搜索匹配到的元组,从而方便的进行代码的替换修改

    i.e

    # coding=utf8
    import numpy as np
    import matplotlib.pyplot as plt
    import random
    
    np.random.seed(19680801)
    num = 10
    x = sorted(np.random.rand(num))
    y = sorted(np.random.rand(num))
    
    x1, x2 = x[:num/2], x[num/2:] # 我们希望对这两行做shuffle
    y1, y2 = y[:num/2], y[num/2:] # 我们希望对这两行做shuffle

    那么我们可以通过正则匹配在vsCode中完成

     查找所用正则
    (x|y)[.*?]

    . 代表任意字符,这用于匹配中括号中的项目,?用于防止贪婪匹配,即匹配到仅一组时匹配就停止,否则会匹配如下所示的一整句

    x[:num/2], x[num/2:]

    替换所用正则
    random.shuffle($0) 

    $0 代表查找到的所有匹配项

    1. 本查找中,由于仅仅使用了一个括号,因此只有一个元组,所有还可以使用 $1 来代表 (x|y),由于没有更多的元组,$ + 更大的数字不能匹配,因此只能替换为 $ + 数字

    2. 同理,如果我们在中括号匹配的部分加上括号,则产生了第二个元组,此时 $2 用于代表中括号 ([.*?]) 匹配到的部分,如下所示:

    (x|y)([.*?])

    3. 如果我们确实需要输出 $ + 数字,但是 $ + 数字又会代表某个元组匹配到的对象,此时正确的方法是将 $ 写两遍,例如

    $1 指代元组的情况下,$$1 输出为 $1 ,反之为 $$1

  • 相关阅读:
    Java学习小记 5
    Java学习小记 4
    Java学习小记 3
    Java学习小记 2
    Java学习小记 1
    ThreadLocal详解
    jvm之java类加载机制和类加载器(ClassLoader)的详解
    什么情况下JVM内存中的一个对象会被垃圾回收?
    java线程池的拒绝策略
    logback配置文件---logback.xml详解
  • 原文地址:https://www.cnblogs.com/luruiyuan/p/7804983.html
Copyright © 2011-2022 走看看