[英]Regex Pattern for string replace
我有一句话,“名字#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);
上下文 - “#”
句子 - “名字#2”
建议 - “不”
预期判决 - “姓名2”
实际句子 - “名称#2”
背景 - “是”
句子 - “他要去了”
建议 - “是”
预期的句子 - “他要去了”
实际句子 - “他要去了”
上下文 - “a”
句子 - “他正处于某个时间点。”
建议 - “z”
预期的句子 - “他在z时间点去了”
如果#
前面带有单词 char,字母,数字或下划线,则当前正则表达式将不匹配。 之所以发生这种情况,是因为单词边界含义取决
将其替换为以下任何修复程序:
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
是必须的。 它将逃脱所有可能破坏模式的特殊字符(如?
, +
等)。
string test = "Name # 2";
test = test.Replace("#", "No.");
你可以试试:
string sentence = Regex.Replace("Name # 2", "#", "No.");
#不必转义,因此不需要反斜杠。
使用正则表达式你可以这样做:
Regex.Replace("Name # 2", "#", "No.")
或者只是一个普通的旧字符串。替换:
"Name # 2".Replace("#", "No.");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.