我有字符串匹配问题。
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;那么为什么它在这里失败。
请建议正则表达式匹配括号内的确切单词。
答案 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>");