如何在使用.Net Regex Class时将正则表达式视为纯文本?

时间:2011-08-01 08:21:37

标签: c# .net regex string

如何使用内置的.NET机制或类似的东西自动转义所有正则表达式字符?

我正在使用Regex类来查找正则表达式的匹配项。见下面的例子。

string pattern = "abc";
Regex regexp = new Regex(@"a\w", RegexOptions.None);
if (regexp.IsMatch(pattern))
{
    MessageBox.Show("Found");
}

所以,这里Found会命中。

现在,在某些情况下,我仍然希望使用Regex类,但将Regular Expression视为纯字符串。因此,例如,我将模式字符串更改为@“a \ w”,并且需要Regex类才能找到匹配项。

string pattern = @"a\w";
Regex regexp = new Regex(@"a\w", RegexOptions.None);
if (regexp.IsMatch(pattern))
{
    MessageBox.Show("Found");
}

在上述情况下,“发现”也应该命中。 那么,问题是如何将正则表达式转换或处理为/作为普通字符串或类似可以在正则表达式类中使用的字符串?如何实现上面的代码片段场景?

注意: - 我不想使用string.Contains,string.IndexOf等进行纯文本字符串匹配。

3 个答案:

答案 0 :(得分:2)

您可以通过Regex.Escape对您的字符串进行“解除正则表达”。这会将您的模式搜索转换为正确转义的正则表达式版本。

string pattern = @"a\w";
Regex regexp = new Regex(Regex.Escape(@"a\w"), RegexOptions.None);
if (regexp.IsMatch(pattern))
{
    MessageBox.Show("Found");
}

答案 1 :(得分:1)

在第二种情况下,你不想搜索正则表达式中\w的含义,你想要搜索文字\w,所以你想要:

string pattern = @"a\w";
Regex regexp = new Regex(@"a\\w", RegexOptions.None);
if (regexp.IsMatch(pattern))
{
    MessageBox.Show("Found");
}

(注意逃脱)

答案 2 :(得分:0)

您只需要转义特殊字符,例如:@"a\\w"