转载请注明:
仰望高端玩家的小清新 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