[C#] Guid 용 C # Regex

문자열을 구문 분석하고 각 Guid 값 주위에 작은 따옴표를 추가해야합니다. 나는 정규식을 사용하여 이것을 할 수 있다고 생각했지만 정확히 정규식 전문가는 아닙니다.

Guid를 식별하는 데 사용할 수있는 좋은 정규식이 있습니까?

두 번째 질문은 유효한 정규식을 찾았다면 사용할 것이라고 가정 Regex.Replace(String, String, MatchEvaluator)하지만 구문이 확실하지 않습니다. 아마도 다음과 같습니다.

return Regex.Replace(stringToFindMatch, GuidRegex, match =>
{
    return string.Format("'{0}'", match.Groups[0].ToString());
});

구문 분석하려는 문자열은 다음과 같습니다.

“PASSWORD1_46_0_에서 passwordco0_.PASSWORD_CONFIG_ID를 PASSWORD_CONFIG에서 passwordco0_ WHERE passwordco0_.PASSWORD_CONFIG_ID = baf04077-a3c0-454b-ac6f-9fec00b8e170; @ p0 = baf04077-a3c0-4540b-ac6f-9fec00b8e170으로 선택합니다.



답변

이것은 매우 간단하며 당신이 말하는 것처럼 대리인이 필요하지 않습니다.

resultString = Regex.Replace(subjectString,
     @"(?im)^[{(]?[0-9A-F]{8}[-]?(?:[0-9A-F]{4}[-]?){3}[0-9A-F]{12}[)}]?$",
     "'$0'");

이는 GUID에 대해 모두 동등하고 허용되는 형식 인 다음 스타일과 일치합니다.

ca761232ed4211cebacd00aa0057b223
CA761232-ED42-11CE-BACD-00AA0057B223
{CA761232-ED42-11CE-BACD-00AA0057B223}
(CA761232-ED42-11CE-BACD-00AA0057B223)

업데이트 1

@NonStatic은 위의 정규식이 잘못된 닫는 구분 기호가있는 잘못된 긍정과 일치 할 것이라는 의견을 제시합니다.

이것은 광범위하게 지원되는 정규식 조건으로 피할 수 있습니다.

조건부는 JGsoft 엔진, Perl, PCRE, Python 및 .NET 프레임 워크에서 지원됩니다. Ruby는 버전 2.0부터 지원합니다. PCRE를 기반으로하는 정규식 기능이있는 Delphi, PHP 및 R과 같은 언어도 조건문을 지원합니다. (출처 http://www.regular-expressions.info/conditional.html )

다음 정규식이 일치합니다.

{123}
(123)
123

그리고 일치하지 않습니다

{123)
(123}
{123
(123
123}
123)

정규식 :

^({)?(\()?\d+(?(1)})(?(2)\))$

솔루션은 필요한 경우 필요한 것을보다 명확하게 표시하기 위해 숫자 만 일치하도록 단순화되었습니다.


답변

대부분의 기본 정규식은 다음과 같습니다.

(^([0-9A-Fa-f]{8}[-][0-9A-Fa-f]{4}[-][0-9A-Fa-f]{4}[-][0-9A-Fa-f]{4}[-][0-9A-Fa-f]{12})$) 

또는 여기에 붙여 넣을 수 있습니다 .

이것이 시간을 절약하기를 바랍니다.


답변

C # .Net이 주어진 텍스트에서 GUID를 찾는 문자열을 찾아서 바꾸려면,

이 RegEx 사용 :

[({]?[a-fA-F0-9]{8}[-]?([a-fA-F0-9]{4}[-]?){3}[a-fA-F0-9]{12}[})]?

C # 코드 예 :

var result = Regex.Replace(
      source,
      @"[({]?[a-fA-F0-9]{8}[-]?([a-fA-F0-9]{4}[-]?){3}[a-fA-F0-9]{12}[})]?",
      @"${ __UUID}",
      RegexOptions.IgnoreCase
);

확실히 작동합니다! 그리고 GUID에 대해 모두 동등하고 허용되는 형식 인 다음 스타일과 일치하고 대체합니다.

"aa761232bd4211cfaacd00aa0057b243"
"AA761232-BD42-11CF-AACD-00AA0057B243"
"{AA761232-BD42-11CF-AACD-00AA0057B243}"
"(AA761232-BD42-11CF-AACD-00AA0057B243)" 


답변

.NET Framework 4에는 향상된 System.Guid 구조가 있습니다. 여기에는 GUID 구문 분석을위한 새로운 TryParse 및 TryParseExact 메서드가 포함됩니다. 여기에 이에 대한 예가 있습니다.

    //Generate New GUID
    Guid objGuid = Guid.NewGuid();
    //Take invalid guid format
    string strGUID = "aaa-a-a-a-a";

    Guid newGuid;

    if (Guid.TryParse(objGuid.ToString(), out newGuid) == true)
    {
        Response.Write(string.Format("<br/>{0} is Valid GUID.", objGuid.ToString()));
    }
    else
    {
        Response.Write(string.Format("<br/>{0} is InValid GUID.", objGuid.ToString()));
    }


    Guid newTmpGuid;

    if (Guid.TryParse(strGUID, out newTmpGuid) == true)
    {
        Response.Write(string.Format("<br/>{0} is Valid GUID.", strGUID));
    }
    else
    {
        Response.Write(string.Format("<br/>{0} is InValid GUID.", strGUID));
    }

이 예제에서 우리는 새로운 guid 객체를 생성하고 유효하지 않은 guid를 가진 하나의 문자열 변수를 취합니다. 그런 다음 TryParse 메서드를 사용하여 두 변수가 모두 유효한 GUID 형식을 가지고 있는지 확인합니다. 예제를 실행하면 문자열 변수에 유효한 guid 형식이 없으며 “InValid guid”라는 메시지가 표시됩니다. 문자열 변수에 유효한 GUID가 있으면 TryParse 메서드에서 true를 반환합니다.


답변

http://regexhero.net/tester/를 사용하여 C # 코드를 쉽게 자동 생성 할 수 있습니다 .

무료입니다.

내가 한 방법은 다음과 같습니다.

여기에 이미지 설명 입력

그런 다음 웹 사이트에서 .NET 코드를 자동 생성합니다.

string strRegex = @"\b[A-F0-9]{8}(?:-[A-F0-9]{4}){3}-[A-F0-9]{12}\b";
Regex myRegex = new Regex(strRegex, RegexOptions.None);
string strTargetString = @"     {CD73FAD2-E226-4715-B6FA-14EDF0764162}.Debug|x64.ActiveCfg =         Debug|x64";
string strReplace = @"""$0""";

return myRegex.Replace(strTargetString, strReplace);


답변

더 쉬운 정규식 패턴을 사용합니다.

^[0-9A-Fa-f\-]{36}$


답변