我正在尝试使用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");
}
答案 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");