首页 > 解决方案 > 替换字符串C#中的单斜杠

问题描述

我的要求

如果字符串包含单斜杠(/ 或 \),则应将其替换为双斜杠

注意:- 字符串是随机生成的,所以我无法控制。

例如我有字符串

string str = @"*?i//y\^Pk@t9`n2";

当我尝试

str = str.Replace(@"\", @"\\").Replace(@"/",@"//");

它用 //// 替换了 // 但我只需要用双斜杠(\\)替换单斜杠(\)。

上面的代码实际结果是

*?i////y\^Pk@t9`n2

预期的结果是

*?i//y\\^Pk@t9`n2

注意 :- 如果字符串在“//”或“\\”等序列中包含双斜杠,则无需修改字符串。但字符串包含单斜杠(/或\)需要用双斜杠替换。

我试图找出其他方法然后我发现以下堆栈溢出已经问答

问题 :-

  1. 如何检查字符串是否包含单斜杠以及如何替换它?
  2. 在进行这样的字符串操作时应该遵循什么最佳实践?

编辑 :-

我有随机生成的字符串来自用户喜欢。

string str = @"*?i//y\^Pk@t9`n2";

有时该字符串包含上面的单斜杠 (\)。如果我们考虑上面没有逐字(@)的字符串,它不是 C# 中的有效字符串。它给出了编译时错误。要使上述字符串有效,我需要将“\”替换为“\\”。

我怎样才能做到这一点?

标签: c#string

解决方案


  1. 我必须做两个 Regex.Replace 并使用环视来实现这一点。最终的解决方案是
Regex.Replace(Regex.Replace(str, @"(?<!\/)\/(?!\/)", @"//"), @"(?<!\\)\\(?!\\)", @"\\")

如果您以前从未处理过正则表达式,那它可能是一头野兽。本质上,我正在寻找所有反斜杠和正斜杠(\\ 和 \/ 转义),一旦我匹配了反斜杠和正斜杠,如果前面有匹配,我将使用负后向和负前向不匹配或在它后面。

负面看背后:

(?<!\/)

负面展望:

(?!\/)

然后我对正斜杠和反斜杠重复两次

  1. 最好的解决方案可能是推出自己的算法。逐个字符地遍历字符串以查找斜杠,如果找到一个,检查下一个字符和上一个字符,如果其中一个存在,则不要插入重复的斜杠,因为这意味着它并不孤单

推荐阅读