使用正則表達式做代碼匹配和替換


轉載請注明:

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM