【问题标题】:Searching for substring with special character using regex使用正则表达式搜索具有特殊字符的子字符串
【发布时间】:2016-05-11 19:01:58
【问题描述】:

作为一个正则表达式新手,我有一个非常快速的问题。我想使用正则表达式在给定字符串中进行简单的子字符串搜索。到目前为止,我有:

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 不太了解。谁能指出我正确的方向?

提前致谢!

【问题讨论】:

  • \b 是单词边界,你的意思是 ^ 和 $(字符串锚点的开始和结束)吗?
  • 嗨@Gusman ...我使用的是单词边界,因为在某些情况下我的子字符串将存在于全文中间(即有一 (1) 只猫坐在墙上) .这看起来不正确吗?
  • 如果匹配可以在其他单词之间是正确的。

标签: c# regex text


【解决方案1】:

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(...) 可能会很好。

【讨论】:

  • 感谢@KSib。我希望为我的文本变量迭代几个值(即两 (2) 只猫、三 (3) 只猫等)。你知道吗,有没有一种以编程方式转义括号的好方法,这样我就不必为每个短语编写正则表达式了?
【解决方案2】:

您的代码中缺少“)”字符。

if(regexsearch.IsMatch(fulltext))
{
     \\ Do thing
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2019-10-17
    相关资源
    最近更新 更多