我想为.NET String类编写扩展方法.我希望它是Split方法的一个特殊的方法 - 在分隔符之前使用转义字符时,它采用转义字符来防止拆分字符串.
写这个的最好方法是什么?我很好奇最好的非正则表达式来接近它.
像签名一样的东西......
public static string[] Split(this string input, string separator, char escapeCharacter) { // ... }
更新: 因为它出现了一个评论,逃避......
在C#中转义非特殊字符时会出现错误 - CS1009:无法识别的转义序列.
在IE JScript中,转义转义字符.除非你尝试\ u然后你得到一个"预期的十六进制数字"错误.我测试了Firefox,它有相同的行为.
我希望这种方法非常宽容并遵循JavaScript模型.如果你在非分隔符上转义,它应该"善意"删除转义字符.
怎么样:
public static IEnumerableSplit(this string input, string separator, char escapeCharacter) { int startOfSegment = 0; int index = 0; while (index < input.Length) { index = input.IndexOf(separator, index); if (index > 0 && input[index-1] == escapeCharacter) { index += separator.Length; continue; } if (index == -1) { break; } yield return input.Substring(startOfSegment, index-startOfSegment); index += separator.Length; startOfSegment = index; } yield return input.Substring(startOfSegment); }
这似乎有用(有一些快速测试字符串),但它不会删除转义字符 - 这将取决于你的确切情况,我怀疑.
这将需要清理一下,但这基本上是....
Listoutput = new List (); for(int i=0; i