2017-08-09 16 views
1

我有一个字符串匹配问题。在括号内搜索精确字符串的正则表达式

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但没有“(”和“)”,为什么在这里失败。

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

+0

括号是正则表达式语言中的一个特殊字符。一个真正的括号,你需要在括号“\(”和“\)”之前加一个反斜杠。 – jdweng

+0

您是否试图只在括号中或两者中都使用括号和不使用括号? –

回答

0

Escape ( and ),否则将会创建capturing group而不是match

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

okk我要试试 – neo

+0

@neo例子已经提供,点击答案中的链接。 – tchelidze

+1

thnxxx正是它的工作 – neo

0

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

0

你可以不用正则表达式替换:

content.Replace(PatternToMatch, ReplaceText); 
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); 
0

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

请注意,这对其他字符也是一个问题......例如,如果您需要搜索字符串a*b+c,您还需要“逃避”星号和加号,因为它们也有特殊含义。

如果你不需要正则表达式的力量,那么最好的解决方案是不使用正则表达式,而只是纯文本替换。在C#中显然是:

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