Regex Hilfe

  • C#
  • .NET (FX) 4.0

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von BeatsleigherXDA.

    Regex Hilfe

    Hallo,

    Ich brauch mal Hilfe von einem Regex Experten, bzw eienr der eine Idee hat wie man folgende strings mithilfe eines Patterns identifizieren kann:

    C#-Quellcode

    1. string a = "1529f951-7531-4059-a239-62400bb16d99e03ec810-55c0-4a1c-9b33-868ff2a702f51e2b93ac-060c-43d1-";
    2. string b = "35854b24-0852-46f9-928f-6c2e07148b85b5c93599-9e78-4";
    3. string c = "b4cb88e5-e000-47f5-a1f0-7766daaacbd06a846fa8-9ac5-4e8e-879c-8b78380f3b66685988f8-b6e8-4";
    4. string d = "f1b8ed0f-648e-42b5-8dcf-bb9fa52e701a38aabd12-5b10-4";
    5. string e = "05f0a73d-6288-4ccf-8158-cd08fb8c2f9a57f4addc-e36b-4cff-b02f-b9f027485";
    6. string f = "d8d51999-5b79-4cb9-ae80-862405dbb8dda0d451ac-c634-4daa-b12b-46ba6eaaf97022357376-2d3c-45b0-a0f5-e";
    7. string g = "b0d25616-edaa-43b2-8b82-5c81e1e46c1d99";
    8. string h = "05f0a73d-6288-4ccf-8158-cd08fb8c2f9a57f4addc-e36b-4cff-b02f-b9f027485";
    9. string i = "5a394897-f81c-4a5a-8153-e38a9257a613207a1550-e748-4727-9568-a77ccc8a07031586d210-26cf-";
    10. string j = "d8d51999-5b79-4cb9-ae80-862405dbb8dda0d451ac-c634-4daa-b12b-46ba6eaaf97022357376-2d3c-45b0-a0f5-e";
    11. string k = "b0d25616-edaa-43b2-8b82-5c81e1e46c1d99";


    Die Strings sind GUID-ähnlich, aber keine echten GUID's.
    Deswegen ist mein versuch diese anhand eines Patterns zu erkennen auch fehlgeschlagen..

    C#-Quellcode

    1. private static bool IsGUID(string guid)
    2. {
    3. if (string.IsNullOrEmpty(guid))
    4. return false;
    5. Guid resGuid;
    6. return Guid.TryParse(guid, out resGuid);
    7. }


    Da kommt bei allen false raus, es muss aber bei allen true rauskommen..
    Irgend ne Idee wich ich diese strigns oben anhand eines Patterns alle erkennen kann?
    Die kriterien die ich bisher rausgefunden hab, die bei allen GUID-like-strings vorhanden sind sind (vllt gibts aber noch bessere Kriterien zur Identifizierung):

    - Zahlen und kleine Buchstaben (a-f)
    - Getrennt mit Bindestrichen
    - Variable Länge.


    Wie kann ich solche Arten von strings eindeutig identifizieren?
    Hoffentlich kann mir jemand helfen :)
    C# Developer
    Learning C++
    Wenn das die Kriterien sind, dann langt doch:

    C#-Quellcode

    1. return guid.All("0123456789abcdef-".ToCharArray().Contains);
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    ThePlexian schrieb:

    Wenn das die Kriterien sind, dann langt doch:

    C#-Quellcode

    1. return guid.All("0123456789abcdef-".ToCharArray().Contains);

    Nun, schonmal nicht schlecht. :)
    Das checked ob diese chars in dem string enthalten sind.
    Wie kann ich aber andere vorkommnisse ausschlißen.
    D.h. Wie in deiner funktion müssen "0123456789abcdef-" enthalten sein, aber auch NUR diese.
    Deine Funktion würde auch was finden wenn der string so aussieht :

    C#-Quellcode

    1. "012345-6789abcd-ef-gzx"


    Andere chars müssen noch zusätzlich wirgendwie auschgeschlossen werden.
    C# Developer
    Learning C++
    Werden sie ja schon: Durch den .All(...)-Befehl: Gibt nur dann True zurück, wenn alle Chars in dem String das Kriterium erfüllen.
    Mal angenommen, alle GUIDs haben den gleichen Aufbau:

    C#-Quellcode

    1. using System;
    2. namespace FooBar {
    3. using System.Text.RegularExpressions;
    4. class Foo {
    5. private readonly Regex guidRegex;
    6. // 1529f951-7531-4059-a239-62400bb16d99e03ec810-55c0-4a1c-9b33-868ff2a702f51e2b93ac-060c-43d1-
    7. Foo() {
    8. guidRegex = new Regex(
    9. @"([^\n\r]){8}-([^\n\r]){4}-([^\n\r]){4}-([^\n\r]){4}-([^\n\r]){20}-([^\n\r]){4}-([^\n\r]){4}-([^\n\r]){4}-([^\n\r]){20}-([^\n\r]){4}-([^\n\r]){4}-(([^\n\r]){1,4})?",
    10. RegexOptions.Compiled | RegexOptions.IgnoreCase);
    11. }
    12. public override bool Equals(object m_obj) {
    13. if (m_obj is string)
    14. if guidRegex.IsMatch((string)m_obj) return true;
    15. else return false;
    16. }
    17. }
    18. }
    "Nichts ist unendlich, bis auf die menschliche Dummheit" - Albert Einstein
    "Man sollte nicht alles vertrauen, was im Netz steht" - Abraham Lincoln