这个正则表达式是否正确:您将如何改进它?

时间:2013-12-16 02:04:28

标签: c# regex

我正在尝试使用C#中的正则表达式编辑字符串。在阅读下面的预期结果之后;我的正则表达式是否正确,如果不正确,我该怎样才能改进它们?

  

方法:

     
      
  • 对于每个“{”char:确保它不会位于空行(前导和尾随空格和格式字符构成空   线)
  •   
  • 对于每个“}”字符:确保它位于自己的行而没有其他文本
  •   

例如:从此转换:

string super
\v\t { abc

    colour "red" }

对此:

string super { 
abc

    colour "red" 
}

我的代码:

public string[] formatFileContents(string fileContents) {
  Regex openBrkRgx   = new Regex(@"([\c\s]+){");
  // does \c capture whitespace chars?

  fileContents       = openBrkRgx.Replace(fileContents, "{\r\n");

  Regex closedBrkRgx = new Regex(@"[\d\w]}[\d\w]"); 
  // is the above regex comprehensive in your opinion - 
  // ie, can you think of areas where this might fail?

  fileContents       = rgx.Replace(fileContents, "\r\n}\r\n");      
}

1 个答案:

答案 0 :(得分:2)

为什么在第二个正则表达式中使用\d?你替换了数字。我猜,以下代码更正确:

const string delimeters = @"[\t\r\n\v\b\s]";

var openBrkRgx = new Regex(delimeters + "*{" + delimeters + "?");
fileContents = openBrkRgx.Replace(fileContents, " {\r\n");

var closedBrkRgx = new Regex(delimeters + "*}" + delimeters + "?");
fileContents = closedBrkRgx.Replace(fileContents, "\r\n}\r\n");