用于字符串替换的正则表达式模式

时间:2016-11-21 11:58:12

标签: c# regex

我有一句话,“名字#2”,

我需要将“#”替换为“否”,

最后一句必须是“第2号名称”。

代码 -

string sentence = Regex.Replace("Name # 2", "\\#\\b", "No.");

显然Regex.Replace无法用'No'替换'#',是否有正确的方法通过正则表达式解决问题。 谢谢 我正在寻找正则表达式模式的原因是因为有一个通用代码执行,如下所示

     string pattern = string.Format(@"\b{0}\b", context);

     sentence = System.Text.RegularExpressions.Regex.Replace(sentence, pattern, suggestion);

context - “#”

句子 - “名称#2”

建议 - “不。”

预期判决 - “姓名2”

实际句子 - “名称#2”

context - “were”

句子 - “他要去了”

建议 - “是”

期待的句子 - “他要去了”

实际句子 - “他要去了”

上下文 - “a”

句子 - “他正处于某个时间点。”

建议 - “z”

期待的句子 - “他在z时间点去了”

4 个答案:

答案 0 :(得分:6)

如果#前面带有字符,字母,数字或下划线,则当前正则表达式不会匹配。发生这种情况是因为单词边界含义与上下文有关。

将其替换为以下任何修复程序:

string pattern = string.Format(@"(?<!\w){0}(?!\w)", Regex.Escape(context));
                                 ^^^^^^    ^^^^^^

(?<!\w)(?!\w)与上下文无关,如果不在前面/后跟单词char,则匹配单词。

或者,使用

string pattern = string.Format(@"(?<!\S){0}(?!\S)", Regex.Escape(context));

仅匹配空格内的单词(?<!\S)负向后看需要空格或字符串的开头在&#34;单词&#34;和负前瞻(?!\S)之前在&#34; word&#34;。

之后需要字符串或空格的结尾

请注意,当您处理用户输入/动态模式构建并且需要在正则表达式模式中使用 literal 字符串时,Regex.Escape是必须的。它将逃脱所有可能破坏模式的特殊字符(如?+等)。

答案 1 :(得分:4)

string test = "Name # 2";

test = test.Replace("#", "No.");

答案 2 :(得分:3)

您可以尝试:

string sentence = Regex.Replace("Name # 2", "#", "No.");

#不必转义,因此不需要反斜杠。

答案 3 :(得分:2)

使用Regex可以这样做:

Regex.Replace("Name # 2", "#", "No.")

或者只是一个普通的旧字符串。替换:

"Name # 2".Replace("#", "No.");