c# - C# 中的字符串替换,但只有确切的字符集
问题描述
我有以下字符串:
string x = "23;32;323;34;45";
我想用 X 替换 23 ,如下所示:
x = "x:32;323;34;45";
但是当我尝试它时,我得到了这个:
x = "x:32;3x;34;45";
有没有办法获得预期的输出?
解决方案
您将需要一个正则表达式 (regexp)。这里的替换规则是
- 词界
- 23
- 词界
所以你的代码看起来像这样
var result = Regex.Replace(input, @"\b23\b", "X");
另一种方法是拆分字符串,替换匹配元素并加入新字符串>
var result = string.Join(";", input.Split(";").Select(v => v == "23" ? "X" : v));
更新:更新字典中的值
假设您知道密钥,这很容易:
myDict["thekey"] = Regex.Replace(myDict["thekey"], @"\b23\b", "X");
如果您想对所有项目进行此替换,我会这样做,但我不确定这是否是最好的解决方案:
[Fact]
public void Replace_value_in_dict()
{
// given
var mydict = new Dictionary<string, string>
{
{ "key1", "donothing" },
{ "key2", "23;32;323;34;45" },
};
// when
var result = mydict
.Select(kv => (kv.Key, Regex.Replace(kv.Value, @"\b23\b", "X")))
.ToDictionary(x => x.Item1, x => x.Item2);
// then
Assert.Equal(result, new Dictionary<string, string>
{
{ "key1", "donothing" },
{ "key2", "X;32;323;34;45" },
});
}
推荐阅读
- python - 如何同时使用两个列表?
- python-3.x - 熊猫用公式添加列
- python - 尝试将 ID 分配给 pandas DataFrame 中的对,得到不一致的结果
- c++ - 如何以大写形式显示答案?
- pandas - 熊猫转置数据框
- github - 转移后的 GITHUB 奇怪的贡献者
- python - Pandas - 按日期计算不同的值 - 一种更有效的方法?
- angular - 在 Angular 服务中链接 HTTP 请求
- c# - StyleCop nuget 包,包括基于项目名称的抑制文件
- python - 由于 ElementNotInteractableException,无法单击带有 selenium 的切换