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

vulvrdjw  于 2023-02-05  发布在  .NET
关注(0)|答案(3)|浏览(87)

如何使用内置的.NET机制或类似的东西自动转义所有正则表达式字符?
我正在使用正则表达式类来查找正则表达式的匹配项。请参见下面的示例。

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

所以,这里发现将击中。
现在,在某些情况下,我仍然希望使用Regex类,但将正则表达式视为普通字符串。因此,例如,我将模式字符串更改为@“a\w”,并需要Regex类找到匹配。

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

在上面的例子中,“Found”也应该命中。所以,问题是如何将正则表达式转换或处理为纯字符串或类似的东西,可以在正则表达式类中使用?如何实现上述代码片段的场景?
注意:-我不想使用string.Contains、string.indexOf等进行纯文本字符串匹配。

1l5u6lss

1l5u6lss1#

你可以通过Regex.Escape“反正则化”你的字符串,这会把你要搜索的模式转换成正确转义的正则表达式版本。

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

yfjy0ee72#

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

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

(Note逃逸)。

0lvr5msh

0lvr5msh3#

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

相关问题