[英]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.