200分, 请教C#中一个正则匹配(或者替换)的写法

Jeremiah 2014-12-30 11:43:30
现有字符串:
"你好, \我是需要被替换的\"字符串\", 我叫\'李四\', \\."

需要的结果为:
"你好, \\我是需要被替换的\"字符串\", 我叫\'李四\', \\."

因为 \", \', \\已经是转义过的字符了, 所以不必再替换. 而\需要替换为\\.

如果用正则, 可以实现吗? 应该如何解?
...全文
134 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ajaxfeifei 2014-12-30
  • 打赏
  • 举报
回复
引用 1 楼 lc2737 的回复:

正则表达式:\\(?![",\\,',\.])

自己做一个正则表达式的小工具。
q107770540 2014-12-30
  • 打赏
  • 举报
回复
或许这样你看r更清楚一些:
	string s="你好, \\我是需要被替换的\\\"字符串\\\", 我叫\\\'李四\\\', \\\\.";
	Console.WriteLine("替换前: "+s);
	s= Regex.Replace(s,@"\\(?!['""\\.])","\\\\");
	Console.WriteLine("替换后: "+s);
	
	/*
	替换前: 你好, \我是需要被替换的\"字符串\", 我叫\'李四\', \\.
	替换后: 你好, \\我是需要被替换的\"字符串\", 我叫\'李四\', \\.
	*/
q107770540 2014-12-30
  • 打赏
  • 举报
回复
void Main()
{
	string s="你好, \\我是需要被替换的\"字符串\", 我叫\'李四\', \\.";
	Console.WriteLine("替换前: "+s);
	s= Regex.Replace(s,@"\\(?!['""\\.])","\\\\");
	Console.WriteLine("替换后: "+s);
	
	/*
	替换前: 你好, \我是需要被替换的"字符串", 我叫'李四', \.
	替换后: 你好, \\我是需要被替换的"字符串", 我叫'李四', \.
	*/
}
Sq-Zyz123 2014-12-30
  • 打赏
  • 举报
回复
up 一下200份
o_range 2014-12-30
  • 打赏
  • 举报
回复
200分的问题,进来膜拜一下
ajaxfeifei 2014-12-30
  • 打赏
  • 举报
回复

正则表达式:\\(?![",\\,',\.])
Jeremiah 2014-12-30
  • 打赏
  • 举报
回复
先结贴, 学习一下正则, 有问新发贴再请求. 谢谢~
ajaxfeifei 2014-12-30
  • 打赏
  • 举报
回复
给大家解释一下正则表达式的意思:

(?!exp)匹配后面跟的不是exp的位置
(?<!exp)匹配前面不是exp的位置
ajaxfeifei 2014-12-30
  • 打赏
  • 举报
回复
引用 10 楼 w59879213 的回复:
[quote=引用 4 楼 q107770540 的回复:]
void Main()
{
	string s="你好, \\我是需要被替换的\"字符串\", 我叫\'李四\', \\.";
	Console.WriteLine("替换前: "+s);
	s= Regex.Replace(s,@"\\(?!['""\\.])","\\\\");
	Console.WriteLine("替换后: "+s);
	
	/*
	替换前: 你好, \我是需要被替换的"字符串", 我叫'李四', \.
	替换后: 你好, \\我是需要被替换的"字符串", 我叫'李四', \.
	*/
}
不好意思, 再咨询一下. 如果双斜线是在中间的情况, 正则应该如何修改呢? 替换前: 你好, \我是需要被替换的\"字符串\", 我叫\'李四\', 我是不需要替换的\\字符串. 替换后: 你好, \\我是需要被替换的\"字符串\", 我叫\'李四\', 我是不需要替换的\\字符串.[/quote] 使用如下表达式即可:已经测试过。

(?<!\\)\\(?!["\\'\.])
Jeremiah 2014-12-30
  • 打赏
  • 举报
回复
引用 11 楼 lc2737 的回复:
[quote=引用 9 楼 q107770540 的回复:] [quote=引用 1 楼 lc2737 的回复:]

正则表达式:\\(?![",\\,',\.])
正则语法中 [] 表区间范围,没必要写这么多逗号吧。。。[/quote] 多谢指正,确实如此。[/quote] 不好意思, 同样也再咨询一下. 如果双斜线是在中间的情况, 正则应该如何修改呢? 替换前: 你好, \我是需要被替换的\"字符串\", 我叫\'李四\', 我是不需要替换的\\字符串. 替换后: 你好, \\我是需要被替换的\"字符串\", 我叫\'李四\', 我是不需要替换的\\字符串.
q107770540 2014-12-30
  • 打赏
  • 举报
回复
	string s="你好, \\我是需要被替换的\\\"字符串\\\", 我叫\\'李四\\', 我是不需要替换的\\\\字符串.";
	Console.WriteLine("替换前: "+s);
	s= Regex.Replace(s,@"(?<!\\)\\(?!['""\\.])","\\\\");
	Console.WriteLine("替换后: "+s);
	
	/*
	替换前: 你好, \我是需要被替换的\"字符串\", 我叫\'李四\', 我是不需要替换的\\字符串.
	替换后: 你好, \\我是需要被替换的\"字符串\", 我叫\'李四\', 我是不需要替换的\\字符串.
	*/
ajaxfeifei 2014-12-30
  • 打赏
  • 举报
回复
引用 9 楼 q107770540 的回复:
[quote=引用 1 楼 lc2737 的回复:]

正则表达式:\\(?![",\\,',\.])
正则语法中 [] 表区间范围,没必要写这么多逗号吧。。。[/quote] 多谢指正,确实如此。
Jeremiah 2014-12-30
  • 打赏
  • 举报
回复
引用 4 楼 q107770540 的回复:
void Main()
{
	string s="你好, \\我是需要被替换的\"字符串\", 我叫\'李四\', \\.";
	Console.WriteLine("替换前: "+s);
	s= Regex.Replace(s,@"\\(?!['""\\.])","\\\\");
	Console.WriteLine("替换后: "+s);
	
	/*
	替换前: 你好, \我是需要被替换的"字符串", 我叫'李四', \.
	替换后: 你好, \\我是需要被替换的"字符串", 我叫'李四', \.
	*/
}
不好意思, 再咨询一下. 如果双斜线是在中间的情况, 正则应该如何修改呢? 替换前: 你好, \我是需要被替换的\"字符串\", 我叫\'李四\', 我是不需要替换的\\字符串. 替换后: 你好, \\我是需要被替换的\"字符串\", 我叫\'李四\', 我是不需要替换的\\字符串.
q107770540 2014-12-30
  • 打赏
  • 举报
回复
引用 1 楼 lc2737 的回复:

正则表达式:\\(?![",\\,',\.])
正则语法中 [] 表区间范围,没必要写这么多逗号吧。。。
Jeremiah 2014-12-30
  • 打赏
  • 举报
回复
多谢~ 调试一下, 一会答复~

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧