第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

用正則表達(dá)式僅替換某些組

用正則表達(dá)式僅替換某些組

假設(shè)我有以下正則表達(dá)式:-(\d+)-我想使用C#將Group 1 (\d+)替換為AA,以獲得:-AA-現(xiàn)在,我使用以下方法替換它:var text = "example-123-example";var pattern = @"-(\d+)-";var replaced = Regex.Replace(text, pattern, "-AA-"); 但是我并不是很喜歡這樣,因?yàn)槿绻腋哪J揭云ヅ鋉(\d+)_,那么我也將不得不替換替換字符串_AA_,這違反了DRY原則。我正在尋找類似的東西:使匹配的文本保持原樣,但將Group 1 by this text和Group 2 by another text...編輯:那只是一個(gè)例子。我只是在尋找一種通用的方式來做我上面說的話。它適用于:anything(\d+)more_text 以及您可以想象的任何模式。我要做的就是只替換組,并保留其余的比賽。
查看完整描述

3 回答

?
江戶川亂折騰

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊

一個(gè)好主意是將所有內(nèi)容封裝在組中,無論是否需要標(biāo)識它們。這樣,您可以在替換字符串中使用它們。例如:


var pattern = @"(-)(\d+)(-)";

var replaced = Regex.Replace(text, pattern, "$1AA$3"); 

或使用MatchEvaluator:


var replaced = Regex.Replace(text, pattern, m => m.Groups[1].Value + "AA" + m.Groups[3].Value);

有點(diǎn)混亂的另一種方法是使用后向/超前:


(?<=-)(\d+)(?=-)


查看完整回答
反對 回復(fù) 2019-10-25
?
米琪卡哇伊

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊

您可以使用lookahead和lookbehind進(jìn)行此操作:


var pattern = @"(?<=-)\d+(?=-)";

var replaced = Regex.Replace(text, pattern, "AA"); 


查看完整回答
反對 回復(fù) 2019-10-25
?
www說

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊

我也有此需要,并為此創(chuàng)建了以下擴(kuò)展方法:


public static class RegexExtensions

{

    public static string ReplaceGroup(

        this Regex regex, string input, string groupName, string replacement)

    {

        return regex.Replace(

            input,

            m =>

            {

                var group = m.Groups[groupName];

                var sb = new StringBuilder();

                var previousCaptureEnd = 0;

                foreach (var capture in group.Captures.Cast<Capture>())

                {

                    var currentCaptureEnd =

                        capture.Index + capture.Length - m.Index;

                    var currentCaptureLength =

                        capture.Index - m.Index - previousCaptureEnd;

                    sb.Append(

                        m.Value.Substring(

                            previousCaptureEnd, currentCaptureLength));

                    sb.Append(replacement);

                    previousCaptureEnd = currentCaptureEnd;

                }

                sb.Append(m.Value.Substring(previousCaptureEnd));


                return sb.ToString();

            });

    }

}

用法:


var input = @"[assembly: AssemblyFileVersion(""2.0.3.0"")][assembly: AssemblyFileVersion(""2.0.3.0"")]";

var regex = new Regex(@"AssemblyFileVersion\(""(?<version>(\d+\.?){4})""\)");



var result = regex.ReplaceGroup(input , "version", "1.2.3");

結(jié)果:


[assembly: AssemblyFileVersion("1.2.3")][assembly: AssemblyFileVersion("1.2.3")]


查看完整回答
反對 回復(fù) 2019-10-25
  • 3 回答
  • 0 關(guān)注
  • 957 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號