1. 程式人生 > >C#用正則表示式高效替換變數

C#用正則表示式高效替換變數

有的時候我們需要進行簡單的字串變數替換. 當然最新的.net已經支援 {name} 這種替換方式. 但是,老的.net是不支援的. 本方法是把“{{varName}}” 這種變數替換成 對應的數值.

例如

Week1 = 星期一
Week2 = 星期二
Week3 = 星期三
Week4 = 星期四
“今天是{{Week1}}, 明天是{{Week2}}

替換結果

“今天是星期一, 明天是星期二”

下面是程式碼

        /// <summary>
        /// 會自動替換 變數   把形如 "{{varName}}" 替換成對應的數值
        ///
</summary>
public static void ReplaceFileVar(string srcFile, string targetFile) { /* * 設定webconfig連線字串 */ string webconfigpath = Path.Combine("./", srcFile); //修改第一個資料庫連線 string webcofnigstring2 = File.ReadAllText(webconfigpath); webcofnigstring2 = ReplaceStringVar(webcofnigstring2); //迴圈替換所有的 {{DBSERVER}} 這種變數 效率比較低,改成上面的replace
//foreach (Match item in mat) //{ // Console.WriteLine(item.Groups[1]); // var name = item.Groups[1].Value; // if (! string.IsNullOrEmpty( InstallContext.Get(name))) // { // webcofnigstring2.Replace(@"{{"+ name + "}}", InstallContext.Get(name));
// } //} File.WriteAllText(targetFile, webcofnigstring2); } /// <summary> /// 會自動替換 變數 把形如 "{{varName}}" 替換成對應的數值 /// </summary> private static string ReplaceStringVar(string str) { Regex reg = new Regex(@"\{\{(.*?)\}\}"); //var mat = reg.Matches(webcofnigstring2); str = reg.Replace(str, new MatchEvaluator(m => InstallContext.Get(m.Groups[1].Value) == string.Empty ? m.Value : InstallContext.Get(m.Groups[1].Value) )); return str; }

InstallContext.cs 順便也貼一下

public static class InstallContext  
{
    private static Dictionary<string, string> kvs = new Dictionary<string,string> ();
    public static string Get(string index) 
    {
        if (kvs.ContainsKey(index)) 
        {
            return kvs[index];
        } else 
        {
            return string.Empty;
        }
    }
    public static void Set(string index, string value) 
    {
        kvs[index] = value;
    }
    //private static InstallContext instance = new InstallContext();
    //private InstallContext()
    //{
    //}
    //public static InstallContext GetInstance()
    //{ 
    //    return instance;
    //}
}

下面是使用方法

        private void button3_Click(object sender, EventArgs e)
        { 
            InstallContext.Set("WebSiteDBConnectstring",textBox1.Text);
            ReplaceFileVar("Web.config.tpl","Web.config"); 
        }

Web.config.tpl 檔案內容

<?xml version="1.0"?>
<configuration>
{{WebSiteDBConnectstring}}
</configuration>

相關推薦

C#表示式高效替換變數

有的時候我們需要進行簡單的字串變數替換. 當然最新的.net已經支援 {name} 這種替換方式. 但是,老的.net是不支援的. 本方法是把“{{varName}}” 這種變數替換成 對應的數值. 例如 Week1 = 星期一 Week2 = 星期二

c# 表示式獲取開始和結束字串中間的值

/// <summary> /// 獲得字串中開始和結束字串中間得值 /// </summary> /// <param name="str">字串</param> /// <param name="s">開始</param>

實現了表示式批量替換更新資料庫資料

select regexp_replace('e:/fs_root/images/host_21_wangyiblog/2009/11/30/14/00/2009113014000560.jpg','e:/fs_root/(.*?)/[^/.]*?.jpg','//1

Objective-C表示式判斷字串是否為手機號、郵箱、身份證號

用正則表示式判斷字串是否為手機號: - (BOOL)isPhoneNumber:(NSString *)str { NSString * MOBILE = @"^1(3[0-9]|5[0-

在visual studio IDE 巧表示式 完成替換工作

1 如將  this.colPrDisprack_shortname.FieldName = "陳列架號程式碼"; 替換成: this .colPrDisprack_shortname.FieldName = "PrDisprack_shortname" ; 查詢的正則表示式為:  {thi

PHP批量替換Img中src內容,表示式獲取圖片路徑實現縮圖功能

/** * 圖片地址替換成壓縮URL * @param string $content 內容 * @param string $suffix 字尾 */ function get_img_thumb_url($content="",$suffix="!c550x260.jpg") { // by

Python 表示式一次替換文章中所有特殊符號,如“-,$()#+&*”之類

一個簡單的正則表示式,可能會起大作用。比如說字符集就是這樣。一篇文章如果有各種亂碼,就可以用這種方法去除。如去除“-,$()#+&*”之類符號是很方便的。按照查詢、分割、替換的套路再做一做這樣的練習。今天晚了,後續還要操作檔案來完善這一點。 import re

C#表示式匹配替換字串

事例一:忘了這個正則是幹嘛的了,反正重要的是方法和類的名字             string SrcStr = this.txt.Text;             string DestStr = "";             //new Regex("");             string

C++利用表示式進行字串的替換

主要要加上標頭檔案#inlcude,這也是劍指offer上的題目 void replaceSpace(string str,int length) { string pattern=" "; regex re(p

C/C++11 表示式替換檔案內容

直接上程式碼,YFile只不過是對fstream的封裝 #include <iostream> #include <string> #include <regex> using namespace std; string R

C#表示式替換指定第幾次匹配…

因工作需要,對資料中第N次出現的詞彙進行替換,如:ab12cde12fg,將第二次匹配到的“12”替換為XX,則結果為:ab12cdeXXfg。 查閱了正則表示式的說明文件,久經嘗試得出如下正則表示式: ^.*?(12.*?){1,1}(?12) 使用此正則表示式進行匹配,使用自定義替換規則Matc

表示式去掉C++中的註釋內容

C++中的註釋內容,有兩種樣式: // 和 /* */ 針對這兩種樣式,正則表示式可以為\/\*[\s\S]*\*\/|\/\/.* \/\*[\s\S]*\*\/可以識別/* */整塊註釋, \

java表示式匹配或替換反斜槓(\)的問題

在正則表示式中,\  表示轉義符不能單獨存在。  要表示字元‘\’ ,就應該寫\\ 。 意思是前一個轉義符\,轉義了後面一個\ 而在java中\也是轉義符,同上,也應該用\\ 匹配: publicclass FanXieGang {     publicstaticvoi

表示式進行批量查詢替換

工作中,我需要把類似 a1b2c a2b3c a3b4c ... 替換成 a1xb2c a2xb3c a3xb4c ... abc都代表相匹配的欄位,1234代表不規則數字,x代表要加上的欄位 查詢:a{/z}b{/z}c 替換:a{1}xb{2}c 問題解決!

vim表示式分組替換功能

                this.專案編號TextBox.Text = _Obj.專案編號;                 this.專案名稱TextBox.Text = _Obj.專案名稱;                 this.負責人TextBox.Text = _Obj.負責人;     

表示式替換

定義和用法  replace() 方法用於在字串中用一些字元替換另一些字元,或替換一個與正則表示式匹配的子串。  語法 stringObject.replace(regexp,replacement) 引數  描述 regexp 必需:規定了要替換的模式的

java表示式判斷一個字串是否是車牌號

public boolean checkCarNumber(String content) { String pattern = "([京津滬渝冀豫雲遼黑湘皖魯新蘇浙贛鄂桂甘晉蒙陝吉閩貴粵青藏川寧瓊]{1}(([A-HJ-Z]{1}[A-HJ-NP-Z0-9]{5})|([A-HJ-

QT 表示式從tableView中篩選出某一日期範圍內的資料

QDate date1,date2; date1=ui->dateEdit_2->date();//提取開始時間 date2=ui->dateEdit_3->date();//提取結束時間 data_filter->

Java表示式判斷輸入的電話號碼格式是否正確

import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.lang3.StringUtils; /** *三大運營商號碼均可驗證(不含衛星通訊1349) */ p

C#使用表示式

新增引用: using System.Text.RegularExpressions; 使用舉例程式程式碼: 1 //初始化字串 2 string str =this.txtSource.Text; 3 //定義正則表示式規則 4 Regex