如何使用内置的.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等进行纯文本字符串匹配。
答案 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"