我有以下输入:
Person 1kg
获得预期的输出:
Person 1kEq
我使用以下模式:
string.Format(@"(?<!\S){0}(?!\S)", Regex.Escape("kg"));
Regex.Replace(inputSentence, Pattern, "kEq");
Regex.Replace
不会将kg
替换为kEq
。
如果我将输入句子编辑为Person 1 kg
,则会发生替换,
有人可以帮我解决这个模式吗?
答案 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。