簡體   English   中英

如果字符串包含列表中的一個,使用正則表達式檢查

[英]If string contains one from the list with regex check

我想檢查我的列表中的 OU 是否包含在此字符串中,並且我希望它檢查 OU= 是否有兩個符號。 例如,在我的列表中,我有 EE 國家/地區代碼,但在此示例字符串中,我有 OU=EER,但它不是國家/地區代碼。 在我的列表中,我沒有 OU=NL。 我知道我需要檢查我找到的字符串是否有兩個字符,但我不知道如何。

細繩:

CN=nlpgebl,OU=用戶,OU=C3176172,OU=EER,OU=NL

代碼:

var countries = new List<string> { "AT", "HR", "BG", "CZ", "EE", "GR", "HU", "LT", "LV", "MK", "PL", "RO", "RS", "SI", "SK", "TR" };
if (countries.Any(nodes[5].InnerText.Contains)) // Regex that i think need here: OU=[a-zA-Z]+

您的輸入字符串是逗號分隔的鍵=值對。 使用它對您有利,並且不需要正則表達式。

用逗號分割,用等號分割每個元素,並用正確的前綴過濾列表。 然后你可以得到你感興趣的兩個答案。

var input = "CN=nlpgebl,OU=Users,OU=C3176172,OU=EER,OU=NL";
IEnumerable<string> ouValues = input
    .Split(',')
    .Select(x => x.Split('=', 2)) // "2" just in case the value has an equals in it
    .Where(x => x[0] == "OU")
    .Select(x => x[1]);

var targetCountries = new List<string> { "AT", "HR", "BG", "CZ", "EE", "GR", "HU", "LT", "LV", "MK", "PL", "RO", "RS", "SI", "SK", "TR" };

問題一是“是否有任何ouValues條目等於targetCountries中的值?”

var inputContainsCountry = ouValues.Intersect(targetCountries).Any();

如果稍后您想知道輸入字符串的目標國家/地區,則需要去掉Any以查看匹配值列表,然后相應地處理集合長度。

問題二是“是否有任何ouValues值正好是兩個大寫字母?”

var containsCountryCode = ouValues.Any(val => val.Length == 2 && char.IsLetter(val[0]) && char.IsLetter(val[1]));
// or
var containsCountryCode = ouValues.Any(val => Regex.IsMatch(val, @"^[A-Z]{2}$"));

這里的正則表達式只是檢查兩個大寫字母,而^$只是確保它是字符串中的唯一內容。

打印你得到的值

Console.WriteLine("Contains a target country: " + inputContainsCountry);
Console.WriteLine("Contains any country code: " + containsCountryCode);

Contains a target country: False
Contains any country code: True

嘗試以下操作:

            string input = "CN=nlpgebl,OU=Users,OU=C3176172,OU=EER,OU=NL";
            string pattern = "OU=(?'value'[A-Za-z0-9]+)";
            MatchCollection matches = Regex.Matches(input, pattern);
            int count = matches.Count;
            foreach (Match match in matches)
            {
                string value = match.Groups["value"].Value;
                Console.WriteLine("Value =  {0}, count = {1}",value, value.Length);

            }
            Console.ReadLine();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM