话题:学习交流C#中字符串的正则表达式之反向引用、分割

.Net技术 码拜 8年前 (2017-04-20) 1225次浏览
    题目要求:将”本人…本人本人..本人本人本人本人….爱爱爱..爱..爱…你你…你..你你你…”,变成”本人爱你”。
本人个人代码如下所示:

string msg = "本人...本人本人..本人本人本人本人....爱爱爱..爱..爱...你你...你..你你你...";
 //Regex.Replace(msg, @"");
 string[] strNum = Regex.Split(msg, @"\.", RegexOptions.IgnorePatternWhitespace);
 //Console.WriteLine(strNum);
string msg2 = null;
for (int i = 0; i < strNum.Length; i++)
{
      msg2 += strNum;
 }
  msg2 = Regex.Replace(msg, @"(.)\1+", "$1");
 Console.WriteLine(msg2);
Console.ReadKey(); 

本人个人在编写运行本人本人的代码时遇到的问题:
在代码运行完下面一行代码(局部代码一)后,strNum数组中就没有‘.’(点号)了,如图片1所示。
局部代码一

 string[] strNum = Regex.Split(msg, @"\.", RegexOptions.IgnorePatternWhitespace);
话题:学习交流C#中字符串的正则表达式之反向引用、分割
图片1

取一空字符串msg,遍历字符串数组strNum,使strNum字符串数组中的每个元素都赋值给msg。本人很奇怪的时,当将strNum数组中的每个字符赋值给msg后,msg中的内容为:本人本人本人本人本人本人本人爱爱爱爱爱你你你你你你 ,如图片2所示。为何当msg运行下一行代码(局部代码二)后,就变成了:本人.本人.本人.爱.爱.爱.你.你.你. ?如图片3所示。
局部代码二

msg2 = Regex.Replace(msg, @"(.)\1+", "$1");
话题:学习交流C#中字符串的正则表达式之反向引用、分割
图片2
话题:学习交流C#中字符串的正则表达式之反向引用、分割
图片3

这个是怎么回事?求指点,谢谢。
 [i] 在最后分享一首本人曾经分享过的诗

江山与情 两首
金庸 [现代]
千古垂名有何欢,世人谁知帝王难。
一个情字书万卷,只写恩爱是江山。
女人本是一枝花,花开四季原为他。
宁愿情郎捻成土,也不开在富贵家。

 本人美丽的校园

话题:学习交流C#中字符串的正则表达式之反向引用、分割
解决方案

6

变量写错了
29行的msg应该为msg2

3

按说Regex支持反向引用:

Quote: 引用:

变量写错了
29行的msg应该为msg2

嗯,是的,错误就在这里。谢谢
本人想知道,你是怎么样发现这个错误的?本人当时就一直不清楚是怎么回事!本人仔细想了一想本人的解题思路,思路无误,代码也无“错误”。当时,就是不知道第29行的msg应该改成msg2 。  这个msg本人当时考虑的是msg2,但是可能敲代码时,一下敲成了msg!

很容易想到把
明明已经通过split把句点全部去掉了,最后的替换结果里面居然还有句点
要么是split语句有问题,要么就是引用了不正确的中间变量了


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明话题:学习交流C#中字符串的正则表达式之反向引用、分割
喜欢 (0)
[1034331897@qq.com]
分享 (0)