〔C#〕正規表示式_搜尋_取代

  • 1240
  • 0

參考文章
//http://coding.anyun.tw/2011/03/11/regex-matchs-and-replace-word/
//C# 使用正規表示式搜尋和取代
//正規表示式(或稱正則表示式)
//在程式語言上一個很方便做字串處理的方式,
//本文主要是介紹在 C# 中要怎麼做搜尋和取代字串,
//每次都會忘記,給自己做個筆記一下囉!

//===============================
//http://coding.anyun.tw/2011/03/11/regex-matchs-and-replace-word/
//C# 使用正規表示式搜尋和取代
//正規表示式(或稱正則表示式)
//在程式語言上一個很方便做字串處理的方式,
//各種程式語言也都有支援,
//隻是它的規則撰寫是需要花點時間學習的,
//但是網路上可以找到許多的工具和網站都可以協助我們來寫規則式,
//這部份就不再多說了。
//本文主要是介紹在 C# 中要怎麼做搜尋和取代字串,
//每次都會忘記,給自己做個筆記一下囉!
//===============================
using System;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;//使用Regex.Replace取代

//================================
string 刪_空格=Regex.Replace("A  A  A",@" ","");//"AAA"

//--------------------------------
//刪_只留16進位,只留數字+abcdef,剩下刪除
//string 字串1=刪.只留16進位("ABCD EFG HIJK");    //字串1="ABCDEF"
//string 字串2=刪.只留16進位("abc def ghijk");    //字串2="abcdef"
//string 字串3=刪.只留16進位("0123456789");        //字串3="0123456789"
//string 字串4=刪.只留16進位("JAKBLC jakblc");    //字串4="ABCabc"
//--------------------------------
public static string 只留16進位(string 來源) {
//    string 非負數字 = @"^\d+[.]?\d*$";
//    string 數字     = @"^\d+(\.)?\d*$";
//    string 非負整數 = @"^\d+$";
//    string 整數     = @"^-?\d+$";
//    string 負整數   = @"^-[0-9]*[1-9][0-9]*$";
//    string 正整數   = @"^[0-9]*[1-9][0-9]*$";
//    string 非正整數 = @"^((-\d+)|(0+))$";
//    string 頭空白= @"^\s+";            //頭空白,用【來源.TrimStart()】取代了
//    string 尾空白= @"\s+$";            //尾空白,用【來源.TrimEnd()】取代了
//    string 頭尾空白= @"^\s+|\s+$";    //頭空白,用【來源.Trim()】取代了
//    string 串首尾空格= @"^ +| +$|^\t+|\t+$";//刪_整個字串的_【空格】【/t】
//    string 字首尾空格= @"\r\n +| +\r\n|\r\n\t+|\t+\r\n";//刪_【\r\n】前後的_【空格】【/t】
//    string 非16進位 = @"[^A-Fa-f0-9]";
//    string 非16進位_與空格 = @"[^A-Fa-f0-9 ]";//小心9後面有一空格
string 非16進位 = @"[^A-Fa-f0-9]";
return Regex.Replace(來源,非16進位,"");
}//只留16進位()__結束

//--------------------------------
//string 字串1=刪.只留10進位("12AB34CD E56FG 78 HIK9");    //字串1="123456789"
//--------------------------------
public static string 只留10進位(string 來源) {
string 非10進位 = @"[^0-9]";
return Regex.Replace(來源,非10進位,"");
}//只留10進位()__結束


//--------------------------------
//刪_只留16進位,只留數字+abcdef+空格,剩下刪除
//string 字串1=刪.只留16進位_與空格("ABCD EFG HIJK");    //字串1="ABCD EF"
//string 字串2=刪.只留16進位_與空格("abc def ghijk");    //字串2="abc def "
//string 字串3=刪.只留16進位_與空格("0123456789");        //字串3="0123456789"
//string 字串4=刪.只留16進位_與空格("JAKBLC jakblc");    //字串4="ABC abc"
//--------------------------------
public static string 只留16進位_與空格(string 來源) {
string 非16進位_與空格 = @"[^A-Fa-f0-9 ]";//小心9後面有一空格
return Regex.Replace(來源,非16進位_與空格,"");
}//只留16進位_與空格()__結束
//--------------------------------
//只留1空格
//步驟 1-TAP當空格,2-頭尾空格刪掉,3-所有2空格,改成1空格
//string 字串1=刪.只留1空格("01234567890123456");    //字串1="01234567890123456"
//string 字串2=刪.只留1空格(" AA  BB   CC  ");        //字串1="AA BB CC"
//string 字串3=刪.只留1空格("  AA   BB   CC  ");    //字串1="AA BB CC"
//--------------------------------
public static string 只留1空格(string 來源) {
string 輸出=字串.TAP當空格(來源);
輸出=頭尾空格(輸出);
while(Regex.IsMatch(輸出,"  ")){ 輸出=Regex.Replace(輸出,"  "," ");}
return 輸出;
}//只留1空格()__結束


//===============================
//http://programdoubledragon.blogspot.com/2013/08/c13.html
//基本概念:
//■跳脫字元(Character Escapes)
//  某些字元代表的特殊意義,例如: * 、$等等
//■分類字元(Character Classes)
//  比對某種類型的字元,
//    例如:[0-9]會將比對輸入的字串是否為數字、
//         [dog]會將比對輸入的字串是否為d、o和g的字母。
//■數量符號: (Quantifiers)
//  用以指定所套用的樣式於字串,
//    比對字串或是字元出現的次數。
//    Ex: 5{2}找到55的字串
//■規則運算(Regular Expression Options)
//  搜尋以及比對樣式
//■置換(Substitutions)
//  取代功能
//===============================
//
//
//
//@符號=逐字識別項,表示要逐字解譯字串常值。@符號會定義「逐字字串常值」
//在字串裡,有些符號有特殊意義,不能單放,加上,前置@符號,
//1-簡單逸出序列 (例如 "\\" 用於反斜線)、
//2-十六進位逸出序列 (例如 "\x0041" 用於大寫 A),
//3-Unicode 逸出序列 (例如 "\u0041" 用於大寫 A) 都是照字面解譯。
//4-引號逸出序列 ("") 不照字面解譯,它會產生單引號。
//5-大括弧逸出序列 ({{ 和 }}),它們會產生一個大括弧字元。註VS2015才有作用

//例:【\】不能單放
string filename1 = @"c:\documents\files\u0066.txt";        //c:\\documents\\files\\u0066.txt
string filename2 = "c:\\documents\\files\\u0066.txt";    //c:\\documents\\files\\u0066.txt
//string filename3 = "c:\documents\files\\u0066.txt";    //組譯錯誤,無法辨認的逸出序列
string AT1 = "\x0041";    //"A"
string AT2 = @"\x0041";    //"\\x0041"
string AT3 = "\u0041";    //"A"
string AT4 = @"\u0041";    //"\\u0041"
string BT1 = "{";    string BT2 = @"{";        //"{",註VS2015才有作用,這裡是VS2010結果
string BT3 = "{{";    string BT4 = @"{{";        //"{{",註VS2015才有作用,這裡是VS2010結果
string BT5 = "{}";    string BT6 = @"{}";        //"{}",註VS2015才有作用,這裡是VS2010結果
string BT7 = "{{}}";string BT8 = @"{{}}";    //"{{}}",註VS2015才有作用,這裡是VS2010結果

//=========================
string 來源="  AB C SDsE  ";//="__AB_C_SDsE__"=空格,用底線比較方便看,以下相同
string 來源2="AB C SDsE  ";    //="AB_C_SDsE__"=空格,用底線比較方便看,以下相同
//符號【@】=逐字字串常值,
string SS1= Regex.Replace(來源,@"s","");    //小寫s,"__AB_C_SDE__"
string SS2= Regex.Replace(來源,@"S","");    //大寫S,"__AB_C_DsE__"
//符號【\】=特殊符號,
//\s=小寫=空白字元=等效[ \f\n\r\t\v]
//\S=大寫=非空白字元,等效[^ \f\n\r\t\v]
//f=換頁符號,n=換行符號,r=回車符號,t=定位字元,v=垂直定位
string CC1= Regex.Replace(來源,@"\s","");            //小寫s,"ABCSDsE"
string CC2= Regex.Replace(來源,@"\S","");            //大寫S,"______"=6空格,用底線比較方便看,以下相同
//符號【[]】=包含,所有符合的狀況,
string CC3= Regex.Replace(來源,@"[ \r\t\n\f]","");    //等效 ,"ABCSDsE"
string CC4= Regex.Replace(來源,@"[^ \r\t\n\f]","");    //等效 ,"______"=6空格
//承上,如果沒包含的話,即是要完全符合,它才會取代
string CC5= Regex.Replace(來源,@" \r\t\n\f","");    //"__AB_C_SDsE__"
string CC6= Regex.Replace(來源,@"^ \r\t\n\f","");    //"__AB_C_SDsE__"
string CC7= Regex.Replace(@"AA \r\t\n\fBB",@" \r\t\n\f","");    //"AA \\r\\t\\n\\fBB"
string CC8= Regex.Replace(@"AA \r\t\n\fBB",@"^ \r\t\n\f","");    //"AA \\r\\t\\n\\fBB"
//符號【^】=開頭
string DD1= Regex.Replace(來源,@"^\s","");    //小寫s,"_AB_C_SDsE__"
string DD2= Regex.Replace(來源,@"^\s+","");    //小寫s,"AB_C_SDsE__"
string DD3= Regex.Replace(來源,@"^\S","");    //大寫S,"__AB_C_SDsE__"
string DD4= Regex.Replace(來源,@"^\S+","");    //大寫S,"__AB_C_SDsE__"
string DD5= Regex.Replace("AB C SDsE  ",@"^\S","");    //大寫S,"B C SDsE  "
string DD6= Regex.Replace("AB C SDsE  ",@"^\S+","");//大寫S," C SDsE  "