2017-01-17 345 views
1

我有以下输入:正则表达式替换字符串

Person 1kg 

为了获得预期的输出:

Person 1kEq 

我现在用的是以下模式:

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

Regex.Replace不能用kEq代替kg

如果我编辑输入句子Person 1 kg更换情况,

有人能帮助我这个模式?

回答

3

(?<!\S)要求在搜索项之前输入字符串的开头或空白。搜索字词后面的012b预览需要字符串结尾或空白字符。这就是为什么如果用Person 1 kg中的空格分隔数字和度量单位,就会发生替换。

看起来在这种情况下,如果没有与其他字母附在一起,您想替换匹配项。使用在开始(?<!\p{L})回顾后和(?!\p{L})前瞻底:

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

regex demo

+0

当我使用上面的模式/ C#语句时,我得到一个FormatException,你能帮我解决吗? – Sandepku

+1

对不起,我一直记得用限制量词将大括号加倍,并忘记在Unicode类别中做同样的事情。 –