c# - 替换字符串C#中的单斜杠
问题描述
我的要求
如果字符串包含单斜杠(/ 或 \),则应将其替换为双斜杠
注意:- 字符串是随机生成的,所以我无法控制。
例如我有字符串
string str = @"*?i//y\^Pk@t9`n2";
当我尝试
str = str.Replace(@"\", @"\\").Replace(@"/",@"//");
它用 //// 替换了 // 但我只需要用双斜杠(\\)替换单斜杠(\)。
上面的代码实际结果是
*?i////y\^Pk@t9`n2
预期的结果是
*?i//y\\^Pk@t9`n2
注意 :- 如果字符串在“//”或“\\”等序列中包含双斜杠,则无需修改字符串。但字符串包含单斜杠(/或\)需要用双斜杠替换。
我试图找出其他方法然后我发现以下堆栈溢出已经问答
问题 :-
- 如何检查字符串是否包含单斜杠以及如何替换它?
- 在进行这样的字符串操作时应该遵循什么最佳实践?
编辑 :-
我有随机生成的字符串来自用户喜欢。
string str = @"*?i//y\^Pk@t9`n2";
有时该字符串包含上面的单斜杠 (\)。如果我们考虑上面没有逐字(@)的字符串,它不是 C# 中的有效字符串。它给出了编译时错误。要使上述字符串有效,我需要将“\”替换为“\\”。
我怎样才能做到这一点?
解决方案
- 我必须做两个 Regex.Replace 并使用环视来实现这一点。最终的解决方案是
Regex.Replace(Regex.Replace(str, @"(?<!\/)\/(?!\/)", @"//"), @"(?<!\\)\\(?!\\)", @"\\")
如果您以前从未处理过正则表达式,那它可能是一头野兽。本质上,我正在寻找所有反斜杠和正斜杠(\\ 和 \/ 转义),一旦我匹配了反斜杠和正斜杠,如果前面有匹配,我将使用负后向和负前向不匹配或在它后面。
负面看背后:
(?<!\/)
负面展望:
(?!\/)
然后我对正斜杠和反斜杠重复两次
- 最好的解决方案可能是推出自己的算法。逐个字符地遍历字符串以查找斜杠,如果找到一个,检查下一个字符和上一个字符,如果其中一个存在,则不要插入重复的斜杠,因为这意味着它并不孤单
推荐阅读
- python - Scraping a list of words split into multiple webpages with Python
- kubernetes - 无法在 Kubernetes 集群上安装 Istio - 权限被拒绝
- apache-kafka - 卡夫卡消费群合并?
- css - 引导链接不会垂直居中,但按钮会
- c# - File.AppendAllText 函数中的 if 语句
- c - C 语言的 Eclipse 控制台上的意外行为
- javascript - 移动到另一个页面 Laravel 后下拉菜单不起作用
- java - 如何在eclipse中找到maven项目的原型?
- sql - 复合键中的右连接 - Access SQL
- angular - 模拟类属性时,Jasmine 不显示模板内容