日期:2014-05-18  浏览次数:20912 次

求解救!转换非引号""内的连续空格(不包括\r\n)为制表符\t,可正则可分步完成!

现在有一个字符串mystr比如是
PGB(1) Output Desc="AC Voltage:1" Group="AC_Grid" Max=2.0 Min=-2.0 Units=" "
PGB(2) Output Desc="du max" Group="0" Max=2.0 Min=-2.0 Units=""
PGB(3) Output Desc="Vdc_R1" Group="0" Max=2.0 Min=-2.0 Units=""

首先我想把mystr连续的空格(不包括换行符\r\n)转换为制表符\t,经请教后,正则表达式可以这么写:Regex re = new Regex(@"[\u0020\u0020]+", RegexOptions.None);
但这里有很多段字符是用引号""包含的一段描述,它包含空格,比如Desc="AC Voltage:1"和Units=" ",
而这些引号中的空格,是我并不想转化成制表符的。
现在想请教,有什么办法能够保留引号内的空格字符,而对字符串mystr内其它连续空格字符均转换为制表符\t

可分步完成,也可用个犀利的正则表达式完成,正则表达式我目前还没太懂,如果可以,希望能给予些些说明,谢谢!!

------解决方案--------------------
连续的空格是换成一个tab还是每个空格换一个tab.
如果每个空格换一个tab.那就循环字符串。碰到空格就换tab.如果碰到第1个引号就不判断空格。第2个引号后又开始把空格换为tab。以此类推.
如果是连续的空格是换成一个tab再特别处理下就OK了。
------解决方案--------------------
Try this
C# code
 string tempStr = File.ReadAllText(@"C:\Users\M\Desktop\Test.txt", Encoding.GetEncoding("GB2312"));
            string pattern = @"(?i)(?>((['""])[^\u0020]+))?[\u0020]+";
            tempStr = Regex.Replace(tempStr, pattern, m => { 
                if (string.IsNullOrEmpty(m.Groups[1].Value)) 
                    return "\t";
                else 
                    return m.Value;
            });