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

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

正則表達(dá)式封裝任何不匹配的部分

正則表達(dá)式封裝任何不匹配的部分

C#
UYOU 2022-12-24 12:43:32
使用示例短語:所有男人都喜歡小工具,但有些男人比其他人更喜歡小工具該示例包含單詞widgets的兩種用法。我要做的是匹配外面的位。請注意,雖然 widgets 是一個詞,但我正在尋找一種也適用于多個詞的正則表達(dá)式解決方案。給定上述示例,輸出將包含 3 個匹配項:所有男人都喜歡但有些男人喜歡比別人多到目前為止,我有以下僅部分有效的正則表達(dá)式:@"(?!widgets\b)\b\w+"局限性在于它無法處理多個單詞短語——它還匹配每個否定詞,而不是匹配/succeed 之前的整個詞串,所以“all”、“men”和“l(fā)ike”而不是“all men like” .我有另一個解決方案,它涉及一個更簡單的正則表達(dá)式和一些額外的 c# 代碼斬波和更改,但這不是我滿意的解決方案:string EmboldenString(string text, string termToExclude){    var pattern = $@" ?{termToExclude} ?";    var tagStart = "<b>";    var tagEnd = "</b>";    var result = Regex.Replace($"{tagStart}{text}{tagEnd}", pattern, (match) =>    {        return $"{tagEnd}{match}{tagStart}";    });    var emptyTag = tagStart + tagEnd;    if (result.StartsWith(emptyTag))        result = result.TrimStart(emptyTag.ToCharArray());    if (result.EndsWith(emptyTag))        result = result.TrimEnd(emptyTag.ToCharArray());    return result;}從上面的代碼可以看出,目標(biāo)是為所有不匹配的位添加標(biāo)簽。任何人都可以提供更好的正則表達(dá)式幫助。
查看完整描述

2 回答

?
九州編程

TA貢獻(xiàn)1785條經(jīng)驗 獲得超4個贊

您可以使用Regex.Split然后用您喜歡的任何標(biāo)簽包裝結(jié)果數(shù)組/列表中的每個奇數(shù)元素:


var s = "All men like widgets but some men like widgets more than others";

var chunks = Regex.Split(s, @"(\s*\bwidgets\b\s*)");

var result = string.Concat(chunks.Select((i, index) => index % 2 == 0 ? $"<b>{i}</b>" : i));

Console.WriteLine(result);

// => <b>All men like</b> widgets <b>but some men like</b> widgets <b>more than others</b>

請參閱C# 演示。


該(\s*\bwidgets\b\s*)模式匹配并捕獲到第 1 組 0+ 個空格、整個單詞widgets和 0+ 個空格。這些匹配項保留在結(jié)果數(shù)組中,因為它們已被捕獲。每個奇數(shù)元素都是一個不匹配的子串。


如果您不想用標(biāo)簽包裝空白的不匹配項,請?zhí)砑宇~外的!string.IsNullOrWhiteSpace(i)檢查:


var chunks = Regex.Split(s, @"(\s*\bwidgets\b\s*)");

var result = string.Concat(

    chunks.Select((i, index) => 

        index % 2 == 0 && !string.IsNullOrWhiteSpace(i) ? 

            $"<b>{i}</b>" : i));

請參閱此 C# 演示。



查看完整回答
反對 回復(fù) 2022-12-24
?
長風(fēng)秋雁

TA貢獻(xiàn)1757條經(jīng)驗 獲得超7個贊

正如艾哈邁德建議你應(yīng)該使用Regex.Spilt()


這是您的用例的示例


var op = Regex.Split("All men like widgets but some men like widgets more than others", @"widgets");

輸出


//All men like

//but some men like

//more than others

更新


您可以使用以下代碼


string op = GetTagsAroud("All men like widgets but some men like widgets more than others", @"widgets");

方法


static string GetTagsAroud(string input, string splitText)

{

    var matches = Regex.Split(input, splitText);

    StringBuilder output = new StringBuilder();

    foreach (string match in matches)

    {

        output.Append("<b>");

        output.Append(match.Trim());

        output.Append("</b>");

    }

    return output.ToString();

}


查看完整回答
反對 回復(fù) 2022-12-24
  • 2 回答
  • 0 關(guān)注
  • 107 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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