正则表达式在括号内搜索确切的字符串

时间:2017-08-09 06:29:56

标签: c# regex string

我有字符串匹配问题。

System.IO.StreamReader objReader = new System.IO.StreamReader(pagePath);
string content = objReader.ReadToEnd();
objReader.Close();

string stringToSearch = "PO";  
string PatternToMatch = @"(" + stringToSearch + ")";
ReplaceText = "<a href ='#'>" + stringToSearch + "</a>";

content = Regex.Replace(content, PatternToMatch, ReplaceText);

// writing the content to the same file
StreamWriter writer = new StreamWriter(pagePath);
writer.Write(content);
writer.Close();

这里,首先我正在阅读整个页面内容并将其存储在可变内容中。    然后,有一个字符串PatternToMatch,我在整个页面中搜索。

如果存在字符串匹配,则将括号内的单词替换为提供的字符。

如果有一个字符串与括号匹配,那么它可以正常工作。但在某些地方,确实如此    替换没有括号的单词。    那么,我应该如何限制它。

假设有一个像这样的字符串 -

 BANGLORE POP is backed up with DELHI POP as backup gateway.

这里,它正在用锚标签替换PO,但没有&#39;(&#39;和&#39;)&#39;那么为什么它在这里失败。

请建议正则表达式匹配括号内的确切单词。

5 个答案:

答案 0 :(得分:0)

退出(),否则将{}创建capturing group,而不是match

string PatternToMatch = @"\(" + stringToSearch + @"\)";

答案 1 :(得分:0)

我本身并不了解C#正则表达式。 PCRE或Posix正则表达式使用( ... )来标记匹配组,即目标的一部分,稍后将被称为&#34; $ 1&#34;或&#34; \ 1&#34;,特别是在进行匹配和替换时。 要对待&#34;(&#34;本身作为一个非元模型,它需要被转义;在大多数语言中,这将使用&#34; \(&#34;。我也不会知道C#字符串中的\ -escaping,但你可能需要加倍反斜杠,使其看起来像"\\\\(" + stringToSearch + "\\\\)"

答案 2 :(得分:0)

您可以在不使用正则表达式替换的情况下执行此操作:

content.Replace(PatternToMatch, ReplaceText);

答案 3 :(得分:0)

你不能简单地在正则表达式中搜索一个符号,它应该以 \ 开头,所以如果你想搜索那么它应该是 \(< /强>

string ReplaceText = "BANGLORE (PO)P is backed up with DELHI POP as backup gateway.";
string stringToSearch = "PO";
string PatternToMatch = @"\(" + stringToSearch + @"\)";
string ReplaceText = "<a href ='#'>" + stringToSearch + "</a>";

content = Regex.Replace(content, PatternToMatch, ReplaceText);

答案 4 :(得分:0)

圆括号对正则表达式具有特殊含义。

请注意,这也是其他角色的问题......例如,如果您需要搜索字符串a*b+c,则需要&#34;转义&#34;也是星号和加号,因为它们也有特殊含义。

如果您不需要正则表达式的强大功能,那么最佳解决方案不是使用正则表达式而是使用纯文本替换。在C#中显然是:

content = content.replace(stringToSearch,
                          "<a href ='#'>" + stringToSearch + "</a>");