正则表达式模式替换字符串

时间:2017-01-17 08:38:31

标签: c# .net regex

我有以下输入:

Person 1kg

获得预期的输出:

Person 1kEq

我使用以下模式:

string.Format(@"(?<!\S){0}(?!\S)", Regex.Escape("kg"));
Regex.Replace(inputSentence, Pattern, "kEq");

Regex.Replace不会将kg替换为kEq

如果我将输入句子编辑为Person 1 kg,则会发生替换,

有人可以帮我解决这个模式吗?

1 个答案:

答案 0 :(得分:3)

(?<!\S)需要字符串的开头或kg搜索字词之前的空格。 (?!\S)前瞻需要搜索词之后的字符串结尾或空格。这就是为什么如果您使用Person 1 kg中的空格分隔数字和测量单位,则会发生替换。

在这种情况下,如果没有用其他字母括起来,你想要替换一个匹配。在开始时使用(?<!\p{L}) lookbehind,在结尾使用(?!\p{L})前瞻:

string.Format(@"(?<!\p{{L}}){0}(?!\p{{L}})", Regex.Escape("kg"));

请参阅regex demo