使用正则表达式做代码匹配和替换

转载请注明:

仰望高端玩家的小清新 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

原文地址:https://www.cnblogs.com/luruiyuan/p/7804983.html