В настоящее время я изучаю C# и RegEx
. Я работаю над маленьким wordcrawler. Я получаю большой список многих слов, в которых я избегаю тех, которые не подходят для моего RegEx.Проверьте, находится ли верхняя буква в строке
Вот мой код:
var WordRegex = new Regex("^[a-zA-Z]{4,}$", RegexOptions.Compiled | RegexOptions.CultureInvariant);
var secondRegex = new Regex("([A-Z]{1})");
var words = new List<string>();
var finalList = new List<string>();
foreach (var word in words)
{
if (WordRegex.IsMatch(word) && secondRegex.Matches(word).Count == 1 || secondRegex.Matches(word).Count == 0)
{
finalList.Add(word);
}
}
Так это работает отлично, если слово «Макларен» (две прописные буквы) это не добавит его в finalList. Но если слова - это что-то вроде «stackOverflow» (одна буква верхнего регистра, но не в начале строки), она берет его в финал. Есть ли простой способ предотвратить эту проблему?
PS: если есть лучший способ, чем RegEx, дайте мне знать!
Вот некоторые примеры:
("McLaren");//false
("Nissan");//true
("BMW");//false
("Subaru");//true
("Maserati");//true
("Mercedes Benz");//false
("Volkswagen");//true
("audi");//true
("Alfa Romeo");//false
("rollsRoyce");//false
("drive");//true
Они с истинным должны быть приняты и другие не должны быть приняты.
Что я хочу достичь, так это то, что регулярное выражение не должно добавлять, когда оно написано как this'rollsRoyce ', но если оно написано как «Rollsroyce» или «RollsRoyce», оно должно быть принято. Поэтому я должен проверить, есть ли заглавные буквы внутри строки.
Какое правило фильтрации вы пытаетесь реализовать? Это не ясно из вашего вопроса. –
Я не уверен точно, чего вы пытаетесь достичь с помощью своего оператора if, но я не думаю, что он будет делать то, что вы считаете из-за приоритета оператора (&& приходит до ||). Может быть. В любом случае: https://msdn.microsoft.com/en-us/library/aa691323(v=vs.71).aspx – LexyStardust