Ik heb een harde tijd regexing deze gegevens om namen te extraheren

stemmen
-1

CN = Sith Cal / O = SEL, CN = Schot Shaf / O = SEL

De string ziet er zo uit, en er kunnen meer dan 2 groepen gescheiden door komma's.

Dit is zo dicht als ik krijg maar niet verkeerd:

((: [A-ZA-z =] + [^ a-zA-Z '-] +) {0,12}) / O = SEL

Gelieve te helpen een aantal reguliere expressies goeroe!

De vraag is gesteld op 02/09/2018 om 05:19
bron van user
In andere talen...                            


2 antwoorden

stemmen
1

Met het oog op de namen van de volgende tekenreeks krijgen: CN = Cal Sith / O = SEL, CN = Scot Shaf / O = SEL

Probeer met een lager dan Fragment:

        string sPattern = @"(?:[a-z=]+)=(?<Name>[a-z\s]+)\/O=SEL";
        Regex oRegex = new Regex(sPattern,RegexOptions.IgnoreCase);
        string sInput = "CN=Cal Sith/O=SEL,CN=Scot Shaf/O=SEL";
        List<string> FullNames = new List<string>();
        foreach (Match oData in oRegex.Matches(sInput))
        {
            FullNames.Add(Convert.ToString(oData.Groups["Name"]));
        }
antwoordde op 02/09/2018 om 06:08
bron van user

stemmen
0

Je kan een positief gebruiken lookbehind ?<=\bCN=) om te beweren wat er voorafgaand is CN=en gebruik een negatief karakter klasse [^/]+ om niet een slash overeenkomen met één of meerdere keren:

(?<=\bCN=)[^/]+

regex demo

string pattern = @"(?<=\bCN=)[^/]+";
string input = @"CN=Cal Sith/O=SEL,CN=Scot Shaf/O=SEL";
List<String> FullNames = Regex.Matches(input, pattern)
    .Cast<Match>()
    .Select(match => match.Value)
    .ToList();

c # Demo

antwoordde op 02/09/2018 om 12:46
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more