繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM