У меня есть список имен проектов, которые мне нужно некоторое соответствие on.The список проектов может выглядеть примерно так:Regular Expression - получить частичную строку
suzu
suzu-domestic
suzu-international
suzuran
suzuran-international
scorpion
scorpion-default
yada
yada-yada
etc
Если искал проект suzu
, я хотел бы иметь следующий результат из списка:
suzu
suzu-domestic
suzu-international
но не ничего, содержащего suzuran
. Я также хотел бы иметь следующий матч, если поиск проекта suzuran
suzuran
suzuran-international
но не ничего, содержащего suzu
.
В C# код у меня есть что-то, что выглядит примерно так:
String searchForProject = "suzu";
String regStr = @"THE_REGEX_GOES_HERE"; // The regStr will be in a config file
List<Project> projects = DataWrapper.GetAllProjects();
Regex regEx = new Regex(String.Format(regStr, searchForProject));
result = new List<Project>();
foreach (Project proj in projects)
{
if (regEx.IsMatch(proj.ProjectName))
{
result.Add(proj);
}
}
Вопрос заключается в том, могу ли я иметь регулярное выражение, которое позволит мне получить матч на всех точных названий проектов, но не те, который будет возвращен startWith эквивалентом? (Сегодня у меня есть regStr = @"^({0})#"
, но это не удовлетворяет описанному выше сценарию, так как он дает больше ударов, чем он должен)
Я был бы признателен, если кто-то может дать мне подсказку в правильном направлении. Благодаря ! Magnus
Вот ссылка на ссылку [** word border '\ b' **] (http://www.regular-expressions.info/wordboundaries.html) на regular-expressions.info, на всякий случай, если вы заинтересованы. Если вместо '-' вместо' '' '_', вам придется использовать что-то вроде' (?! [\ P {L} \ p {N}]) ', а' _' - символ слова. –
Отлично stribizhev! Я ценю дополнительную _tutorial_ относительно LINQ и ссылку на ** границу слова **! – Metscore
Что касается производительности регулярных выражений против чистого подхода LINQ: если вы объявляете регулярное выражение как поле «public static readonly» в статическом классе с помощью 'RegexOptions.Compiled', скорость будет сопоставимой, а регулярное выражение предоставит вам лучшую гибкость и контроль над вашим текстовым вводом и выводом. –