我有一个句子,“名字#2”,
我需要用“否”替换“#”,
最后一句必须是“2号姓名”。
代码-
string sentence = Regex.Replace("Name # 2", "\\#\\b", "No.");
显然 Regex.Replace 未能将“#”替换为“否”,是否有通过正则表达式解决问题的正确方法。 谢谢 我正在寻找正则表达式模式的原因是因为有一个通用代码可以执行,如下所示
string pattern = string.Format(@"\b{0}\b", context);
sentence = System.Text.RegularExpressions.Regex.Replace(sentence, pattern, suggestion);
上下文 - “#”
句子 - “名字#2”
建议 - “不。”
预期句子-“2号姓名”
实际句子 - “名字#2”
上下文 - "is"
句子 - “他要去”
建议 - "is"
预期的句子 - “他要去”
实际句子 - “他要去”
上下文 - “a”
句子 - “他正处于某个时间点。”
建议 - “z”
预期句子 - “他在 z 时间点”
最佳答案
如果 #
则当前正则表达式将不匹配以 word 字符、字母、数字或下划线开头。发生这种情况是因为单词边界的含义取决于上下文。
将其替换为以下任何修复:
string pattern = string.Format(@"(?<!\w){0}(?!\w)", Regex.Escape(context));
^^^^^^ ^^^^^^
(?<!\w)
和 (?!\w)
与上下文无关,如果前面/后面没有字符 char,则将匹配单词。
或者,使用
string pattern = string.Format(@"(?<!\S){0}(?!\S)", Regex.Escape(context));
仅匹配空格内的单词作为 (?<!\S)
负向后视需要在“单词”之前的空格或字符串的开头,以及负向先行 (?!\S)
需要在“单词”之后的字符串或空格结束。
请注意 Regex.Escape
当您处理用户输入/动态模式构建并且需要在正则表达式模式中使用 literal 字符串时,这是必须的。它将转义所有可能破坏模式的特殊字符(如 ?
、 +
等)。
关于c# - 字符串替换的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40719641/