C#正则表达式:在一行中匹配精确字符串但忽略大小写。

3

我目前拥有的正则表达式代码将会区分大小写地精确匹配,那么我需要做出什么改变才能忽略大小写呢?

public static bool ExactMatch(string input, string match)
{
    return Regex.IsMatch(input, string.Format(@"\b{0}\b", Regex.Escape(match)));
}
5个回答

7

这应该可以工作:

public static bool ExactMatch(string input, string match)
{
    return Regex.IsMatch(input, string.Format(@"\b{0}\b", Regex.Escape(match)), RegexOptions.IgnoreCase);
}

6
(?i) 参数使正则表达式不区分大小写:
@"(?i)\b{0}\b"

请注意,\b单词边界仅在搜索词以字母或数字字符开头和结尾时起作用。

实际上是字母数字和下划线字符。单词边界匹配文本中 \w\W\W\w 为真的位置。请参阅单词边界 - JDB
@Cyborgx37:你当然是对的关于下划线,但是你的解释并不完全正确。单词边界也会在字符串的开头/结尾匹配(如果字符串以“字母数字”字符开头/结尾)。 - Tim Pietzcker
您是正确的。我并没有打算提供完整的定义(该定义在链接的文档中给出)。 - JDB
这个(?i)参数对我来说非常关键,因为我需要在MVC RouteAttribute路由变量约束中使用Regex,而我无法设置RegexOptions。这对我来说是最好的答案,因为它将功能保留在正则表达式字符串本身中。 - bojingo

1
在服务器端,可以使用"(?i)",但是在客户端无效。我想这对你有用,它会忽略大小写。
例如:"...(?i)(jpg|jpeg|gif|png|wpf|..."
希望能帮到你。

"(?i)" 在客户端也起作用。 (两个地方都是相同的.NET框架。) - John Fisher
JavaScript不理解.NET的正则表达式语法来进行分组。当您在RegularExpressionValidator ASP.NET上将EnableClientScript设置为true时,ASP.NET会在JavaScript中重新创建您的正则表达式,以便在控件上启用客户端验证。 在这种情况下,JavaScript不支持命名组(?<t> ...)和非捕获组(?:...)的语法。我的答案是100%正确的,我不明白为什么有些人会这样,他们根本不知道自己在说什么就给出评分。 - AAlferez
虽然你对JavaScript的理解是正确的,但是这个问题中的“客户端”指的是C#而不是JavaScript。(请注意标签。) - John Fisher
这就是为什么我要解释,如果你尝试使用JavaScript在客户端创建一个启动脚本并运行它,它是不起作用的。 - AAlferez
有什么意义呢?他不是在问网页或JavaScript。他在问C#。你在回答问题时提出了一个完全无关的概念。虽然它可能是准确的,但与问题无关。 - John Fisher
显示剩余2条评论

0

RegexOption.IgnoreCase 应该是一个选项。

Regex.IsMatch(input, string.Format(@"\b{0}\b", Regex.Escape(match)), RegexOptions.IgnoreCase)

0

只需使用 Regex.IsMatch 的重载,它允许您指定选项:

return Regex.IsMatch(input, string.Format(@"\b{0}\b", Regex.Escape(match)), RegexOptions.IgnoreCase);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接