亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

使用正則表達式在 C# 中用單引號將 GUID 括起來

使用正則表達式在 C# 中用單引號將 GUID 括起來

C#
回首憶惘然 2022-07-23 16:52:21
GUID 可以出現在帶有或不帶有單引號的語句中,例如string inputString = @"ObjectID='{A591C480-2979-48ED-9796-5C3149472E7A}' and ObjectID={90f0fb85-0f80-4466-9b8c-2025949e2079}";我的要求是:如果 GUID 用單引號括起來,請跳過它。如果它沒有用單引號括起來,則用單引號括起來。我期待輸出像inputString = @"ObjectID='{A591C480-2979-48ED-9796-5C3149472E7A}' and ObjectID='{90f0fb85-0f80-4466-9b8c-2025949e2079}'"或者inputString = @"ObjectID='{A591C480-2979-48ED-9796-5C3149472E7A}' and ObjectID={'90f0fb85-0f80-4466-9b8c-2025949e2079'}"在單引號內查找 GUID 的正則表達式是var quotedGuidMatches = Regex.Matches(inputString, @"'[({]?\s?[a-zA-Z0-9]{8}\s?[-]?\s?([a-zA-Z0-9]{4}\s?[-]?\s?){3}\s?[a-zA-Z0-9]{12}\s?[})]?'");查找 GUID 的正則表達式是var guidMatches = Regex.Matches(inputString, @"\b[({]?\s?[a-zA-Z0-9]{8}\s?[-]?\s?([a-zA-Z0-9]{4}\s?[-]?\s?){3}\s?[a-zA-Z0-9]{12}\s?[})]?\b");用單引號包圍 guid 的正則表達式是inputString = Regex.Replace(inputString, @"\b[({]?\s?[a-zA-Z0-9]{8}\s?[-]?\s?([a-zA-Z0-9]{4}\s?[-]?\s?){3}\s?[a-zA-Z0-9]{12}\s?[})]?\b", "'$0'", RegexOptions.IgnoreCase);不幸的是,這個發現所有 GUID 都在單引號內并且沒有單引號。replace 方法最終將圍繞 guid 已經有多個單引號的單引號。您能否幫我找到不在單引號內的 GUID。然后用單引號括起來。
查看完整描述

3 回答

?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

您可以匹配單引號內的 GUID 并捕獲它,以便能夠測試該組以在匹配評估器內進行匹配,并在將用單引號括起來的所有其他上下文中匹配 GUID:


var inputString = @"ObjectID='{A591C480-2979-48ED-9796-5C3149472E7A}' and ObjectID={90f0fb85-0f80-4466-9b8c-2025949e2079}";

var guid = @"[({]?\s?[a-zA-Z0-9]{8}\s?[-]?\s?(?:[a-zA-Z0-9]{4}\s?[-]?\s?){3}\s?[a-zA-Z0-9]{12}\s?[})]?";

inputString = Regex.Replace(inputString, $@"('{guid}')|{guid}", x =>

    x.Groups[1].Success ? x.Value : $"'{x.Value}'");

Console.WriteLine(inputString);

// => ObjectID='{A591C480-2979-48ED-9796-5C3149472E7A}' and ObjectID='{90f0fb85-0f80-4466-9b8c-2025949e2079}'

請參閱C# 演示。


請注意,我([a-zA-Z0-9]{4}\s?[-]?\s?)將原始模式中的捕獲組設為非捕獲,(?:[a-zA-Z0-9]{4}\s?[-]?\s?).


$@"('{guid}')|{guid}"字符串文字創建一個正則表達式,如


('[({]?\s?[a-zA-Z0-9]{8}\s?[-]?\s?(?:[a-zA-Z0-9]{4}\s?[-]?\s?){3}\s?[a-zA-Z0-9]{12}\s?[})]?')|[({]?\s?[a-zA-Z0-9]{8}\s?[-]?\s?(?:[a-zA-Z0-9]{4}\s?[-]?\s?){3}\s?[a-zA-Z0-9]{12}\s?[})]?

第一個備選方案將單引號內的 GUID 匹配并捕獲到組 1 中,第二個備選方案匹配其他上下文中的 GUID。如果匹配項尚未用單引號括起來,則該x => x.Groups[1].Success ? x.Value : $"'{x.Value}'"行僅用 s 包裝匹配項。'


查看完整回答
反對 回復 2022-07-23
?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

如果不需要 Regex,為什么不使用簡單的方法呢?


void Main()

{

    string ObjectID="'{A591C480-2979-48ED-9796-5C3149472E7A}'";


    if (!(ObjectID.StartsWith("'") && ObjectID.EndsWith("'")))

    {

        ObjectID = $"'{ObjectID.Trim('\'')}'";

    }


    Console.WriteLine(ObjectID);

}

Trim如果字符串在開頭或結尾只有一個撇號,我添加了調用。


查看完整回答
反對 回復 2022-07-23
?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

我想出了這個解決方案。這個想法是從有引號的 Guid 中刪除引號。然后為所有(裸)Guid 添加引號。如果有任何其他解決方案可以找到沒有單引號的精確 Guid 并使用純正則表達式用單引號括起來,我會接受它作為答案。


using System;

using System.Text.RegularExpressions;


namespace RegexTest

{

    class Program

    {

        static void Main(string[] args)

        {

            string inputString = @"ObjectID = '{A591C480-2979-48ED-9796-5C3149472E7A}' and ObjectID = { 90f0fb85 - 0f80 - 4466 - 9b8c - 2025949e2079 }";

            Console.WriteLine("Before: ");

            Console.WriteLine(inputString);


            var quotedGuidMatches = Regex.Matches(inputString, @"'[({]?\s?[a-zA-Z0-9]{8}\s?[-]?\s?([a-zA-Z0-9]{4}\s?[-]?\s?){3}\s?[a-zA-Z0-9]{12}\s?[})]?'");


            var guidMatches = Regex.Matches(inputString, @"\b[({]?\s?[a-zA-Z0-9]{8}\s?[-]?\s?([a-zA-Z0-9]{4}\s?[-]?\s?){3}\s?[a-zA-Z0-9]{12}\s?[})]?\b");


            //First eliminate single quotes from guoted guids

            foreach(var quotedGuid in quotedGuidMatches)

            {

                inputString = inputString.Replace(quotedGuid.ToString(), quotedGuid.ToString().Trim('\''));

            }            


            //After single quotes have been eliminated from guids, surround all naked guids with single quotes

            inputString = Regex.Replace(inputString, @"\b[({]?\s?[a-zA-Z0-9]{8}\s?[-]?\s?([a-zA-Z0-9]{4}\s?[-]?\s?){3}\s?[a-zA-Z0-9]{12}\s?[})]?\b", "'$0'", RegexOptions.IgnoreCase);


            Console.WriteLine("\nAfter: ");

            Console.WriteLine(inputString);


            Console.ReadLine();

        }

    }

}

http://img1.sycdn.imooc.com//62dbb6f40001de7b09830131.jpg

查看完整回答
反對 回復 2022-07-23
  • 3 回答
  • 0 關注
  • 193 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號