0

我有许多用户定义的Regexes 用于测试某些strings 以查看是否应该排除它们。

private readonly IEnumerable<Regex> exclusions = <some user defined source>;

static bool Exclude(string value)
{
    return this.exclusions.Any(regex => regex.IsMatch(value);
}

我在想,有没有办法将集合exclusions组合成一个组合exclusion Regex,这样我就可以从Exclude函数中删除迭代,就像这样。

static bool Exclude(string value)
{
    return this.exclusion.IsMatch(value);
}

这种方法是否可行,是否具有潜在的性能优势,还是只是将迭代的负担推到正则表达式处理器中?


编辑

所以,我可以简单地做,

var exclusion =
    new Regex(string.Join("|", exclusions.Select(e => e.ToString()));

有没有更复杂的选择?


编辑 2

我已经决定,由于我无法控制正则表达式,因此盲目地组合它们是一种天真的方法,更可能导致错误而不是提高性能。

4

2 回答 2

1

逻辑或:

regex1 | regex2 | ...
于 2012-08-15T14:01:24.897 回答
1

我不明白您为什么要这样做,您当前的代码对我来说看起来不错,但我认为您可以获取定义正则表达式的所有字符串并将它们组合成一个这样的:

(?:(?:REGEX1)|(?:REGEX2)|(?:REGEX3)|(?:REGEX4))
于 2012-08-15T14:01:30.560 回答