我有一个非常快速的问题作为正则表达式新手。我想使用正则表达式在给定字符串中进行简单的子字符串搜索。到目前为止,我有:
string text = "One (1) cat";
Regex regexsearch = new Regex("\b(" + Regex.Escape(text) + ")\b")
string fulltext = "One (1) cat sat on the wall";
if(regexsearch.IsMatch(fulltext)
{
\\Do thing
}
但是,我每次都跳过我的功能,即使应该匹配。
我认为我对Regex.Escape还不太了解。任何人都可以指出我正确的方向吗?
提前致谢!
答案 0 :(得分:0)
Regex.Escape(...)
没有按照您认为的那样做。
如果您转储Regex.Escape(text)
的内容,那么您将获得以下内容(不含引号):
"One\ \(1\)\ cat"
我确信这不是你想要的。
var text = "One (1) cat";
text = text.Replace("(", Regex.Escape("(")).Replace(")", Regex.Escape(")"));
var regexsearch = new Regex(text);
var fulltext = "One (1) cat sat on the wall";
if (regexsearch.IsMatch(fulltext)) {
Console.WriteLine("okay");
}
问题是你逃避太多了。注意上面的括号,我在每个前面加上斜线。如果你只是在(1)上做一个Regex.Escape(...),它可能会很好。
答案 1 :(得分:0)
您的代码中缺少“)”字符。
if(regexsearch.IsMatch(fulltext))
{
\\ Do thing
}