2018-07-26 【c#】正則表達(dá)式

例子記錄

1.string[] dataArray = Regex.Split(lineContent.Trim(), "\\s+", RegexOptions.IgnoreCase);
去掉一行的首尾空格五嫂,按照中間1個(gè)或多個(gè)空格進(jìn)行拆分夺巩,忽略大小寫

對(duì)字符串操作的一種邏輯公式:匹配/過(guò)濾/替代 字符串
對(duì)字符串的控制非常簡(jiǎn)潔快速
感覺(jué),很好用,處理字符串的時(shí)候 比如說(shuō)字符串按照一定格式分割缎浇,拼接之類

目標(biāo):能夠?qū)φ帐謨?cè)寫出想要的正則表達(dá)式

1.基本語(yǔ)法
abc ccccd12 3.

直接匹配:ccc abc [ccc]cd12 3.

\d :?jiǎn)蝹€(gè)數(shù)字 abc ccccd[1][2] [3].
\D :?jiǎn)蝹€(gè)字符(包含特殊字符)[a][b][c][ ][c][c][c][c][d]12[ ][ ][ ][ ]3[.]
\w :?jiǎn)蝹€(gè)字符(不包含特殊字符)[a][b][c][c][c][c][c][d]123[.]
\W:特殊字符 abc[ ]ccccd12[ ][ ][ ][ ]3[.]
. :任何字符 [a][b][c][ ][c][c][c][c][d][1][2][ ][ ][ ][ ][3][.]
. :那個(gè). abcccccd123[.]
[a.ed]:字符集 [a]bccccc[d]123[.]


c{1,3}:一個(gè)到三個(gè) ab[ccc][cc]d123.
c* :零個(gè)或多個(gè) []a[]b[ccccc][]d[]1[]2[]3[].[]
c+:一個(gè)或多個(gè) ab[ccccc]d123.
c?:零個(gè)或一個(gè) []a[]b[c][c][c][c][c][]d[]1[]2[]3[].[]


\s :匹配空格 abc[ ]ccccd12[ ][ ][ ][ ]3.
\S :匹配非空格 [a][b][c] [c][c][c][c][d][1][2][3][.]
^ :從頭開始
組合:^abc.3 從頭開始芹缔,abc蒋院,然后.任何字符,零個(gè)或多個(gè)契沫,以3結(jié)尾
[abc ccccd12 3].
(.) :[(<1>abc ccccd12 3. )][(<1>)]
.
:[abc ccccd12 3. ][]
ccd|cc :abc [cc][ccd]12 3.
(ccd|cc) :abc [(<1>cc)][(<1>ccd)]12 3.


This is wenxuejia testing testing testing!
\b :字符邊界 \1 :匹配成功group中的第一個(gè)
組合:
\b(\w+)\W(\1)\W\W(\1)\b
This is wenxuejia [(<1>testing) (<2>testing) (<3>testing)]!


替換:
替換的內(nèi)容永遠(yuǎn)都是原文本的內(nèi)容,通過(guò)正則表達(dá)式匹配出來(lái)文本昔汉,來(lái)通過(guò)組名或者組號(hào)來(lái)進(jìn)行對(duì)原文本的替換懈万,替換的位置是用正則表達(dá)式匹配出來(lái)的內(nèi)容。

LINK:https://www.cnblogs.com/dwlsxj/p/RegexReplace.html

image.png

2.Regex類使用
(該類下面有很多靜態(tài)方法,可以緩存已有的正則表達(dá)式的運(yùn)算钞速,下次計(jì)算的時(shí)候速度快很多贷掖;(未進(jìn)行驗(yàn)證))

2.1驗(yàn)證是否匹配

RegexIsMatch.png
    static void Main(string[] args)
    {
        //1.判斷字符串是否符合匹配正則表達(dá)式
        string[] values = { "111-22-3333", "111-2-3333" };
        string pattern = @"^\d{3}-\d{2}-\d{4}$";   //@:不讓它轉(zhuǎn)義 

        foreach (var value in values)
        {
            if(Regex.IsMatch(value,pattern))
            {
                Console.WriteLine("{0} is valid", value);
            }
            else
            {
                Console.WriteLine("{0} is not valid", value);
            }
        }
        Console.ReadLine();
    }

2.2獲得匹配結(jié)果


RegexMatch.png
    private static void RegexMatch()
    {
        var input = "This is wenxuejia testing testing  testing!";
        var pattern = @"\b(\w+)\W(\1)\W\W(\1)\b";
        Match match = Regex.Match(input, pattern);

        while(match.Success)
        {
            Console.WriteLine("Duplication {0} found",
                match.Groups[1].Value);

            Console.WriteLine("match.ToString: {0} ", match.ToString());
            match = match.NextMatch();
        }
    }

2.3替換


RegexReplace.png
    private static void RegexReplace()
    {
        string pattern = @"\b\d+\.\d{2}\b";

        //$$:包裹替換字符串的單個(gè)"$文本" 這不是一句人話,解釋一下:$$顯示出來(lái)就是$ 其他的渴语,一個(gè)字符就是一個(gè)字符比如說(shuō)@就是@苹威,2就是2
        //$&:把后面的拼接起來(lái)

        string replacement = "¥$&";
        string input = "Total cost: 103.64";
        Console.WriteLine(Regex.Replace(input, pattern, replacement));

    }

2.4字符串分割

RegexSplit.png
    private static void RegexSplit()
    {
        string input = "1. Egg 2. Bread  3. Milk     4. Coffee";
        string pattern = @"\b\d{1,2}\.\s";
        foreach(string item in Regex.Split(input,pattern))
        {
            if(!String.IsNullOrEmpty(item))
            {
                Console.WriteLine(item);
            }
        }
    }

3.c#的Match類和Group類
Match用于找到 匹配字符串 在字符串中出現(xiàn)的位置

RegexMatch.png
    private static void Match()
    {
        MatchCollection matches;

        Regex r = new Regex("abc");
        matches = r.Matches("123abc4abcd");

        foreach(Match match in matches)
        {
            Console.WriteLine("{0} found at position {1}",
                match.Value, match.Index);

            Console.WriteLine("{0}", match.Result("------ $& ------"));
        }

    }

Group可以方便獲取第幾個(gè)括號(hào)中的字符串

RegexGroup.png
    private static void Groups()
    {
        string input = "Born: July 28, 1989";
        //每一個(gè)括號(hào)都代表一個(gè)組,完整的是group0驾凶,第一個(gè)括號(hào)是group1
        string pattern = @"\b(\w+)\s(\d{1,2}),\s(\d{4})\b"; 

        Match match = Regex.Match(input, pattern);
        if(match.Success)
        {
            for(int i = 0;i < match.Groups.Count;i ++)
            {
                Console.WriteLine("Group {0}: {1}",
                    i, match.Groups[i].Value);
            }
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末牙甫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子调违,更是在濱河造成了極大的恐慌窟哺,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件技肩,死亡現(xiàn)場(chǎng)離奇詭異且轨,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)虚婿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門旋奢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人然痊,你說(shuō)我怎么就攤上這事至朗。” “怎么了剧浸?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵锹引,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我唆香,道長(zhǎng)嫌变,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任躬它,我火速辦了婚禮初澎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘虑凛。我一直安慰自己碑宴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布桑谍。 她就那樣靜靜地躺著延柠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锣披。 梳的紋絲不亂的頭發(fā)上贞间,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天贿条,我揣著相機(jī)與錄音,去河邊找鬼增热。 笑死整以,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的峻仇。 我是一名探鬼主播公黑,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼摄咆!你這毒婦竟也來(lái)了凡蚜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吭从,失蹤者是張志新(化名)和其女友劉穎朝蜘,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涩金,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谱醇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了步做。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片副渴。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖辆床,靈堂內(nèi)的尸體忽然破棺而出佳晶,到底是詐尸還是另有隱情桅狠,我是刑警寧澤讼载,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站中跌,受9級(jí)特大地震影響咨堤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜漩符,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一一喘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嗜暴,春花似錦凸克、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至舆逃,卻和暖如春蚂维,著一層夾襖步出監(jiān)牢的瞬間戳粒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工虫啥, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蔚约,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓涂籽,卻偏偏與公主長(zhǎng)得像苹祟,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子又活,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 專業(yè)考題類型管理運(yùn)行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項(xiàng)A選項(xiàng)B選項(xiàng)C選項(xiàng)D選項(xiàng)E選項(xiàng)F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 8,997評(píng)論 0 13
  • 幾個(gè)正則表達(dá)式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:ht...
    沒(méi)技術(shù)的BUG開發(fā)攻城獅閱讀 4,588評(píng)論 0 23
  • 推薦幾個(gè)正則表達(dá)式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:...
    木易林1閱讀 11,494評(píng)論 9 151
  • 在C語(yǔ)言中,五種基本數(shù)據(jù)類型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來(lái)閱讀 3,345評(píng)論 0 2
  • 正則表達(dá)式到底是什么東西苔咪?字符是計(jì)算機(jī)軟件處理文字時(shí)最基本的單位,可能是字母柳骄,數(shù)字团赏,標(biāo)點(diǎn)符號(hào),空格耐薯,換行符舔清,漢字等...
    獅子挽歌閱讀 2,147評(píng)論 0 9