很抱歉提出这个问题,但我真的卡住了。此代码属于已离开公司的人。它引起了问题。
protected override string CleanDataLine(string line)
{
//the regular expression for GlobalSight log
Regex regex = new Regex("\".+\"");
Match match = regex.Match(line);
if (match.Success)
{
string matchPart = match.Value;
matchPart =
matchPart.Replace(string.Format("\"{0}\"",
Delimiter), string.Format("\"{0}\"", "*+*+"));
matchPart = matchPart.Replace(Delimiter, '_');
matchPart =
matchPart.Replace(string.Format("\"{0}\"", "*+*+"),
string.Format("\"{0}\"", Delimiter));
line = line.Replace(match.Value, matchPart);
}
return line;
}
我花了很多时间研究。他想要完成什么?
感谢您的帮助。
答案 0 :(得分:2)
正则表达式匹配
"
),+
)个字符(除换行符之外的任何字符(.
),尽可能多),"
。这不是一个非常好的正则表达式。例如,在字符串foo "bar" baz "bam" boom
中,它将匹配"bar" baz "bam"
。
如果打算匹配带引号的字符串,则更合适的正则表达式为"[^"]*"
。
答案 1 :(得分:2)
。是除\ n之外的任何字符,+表示1或更多。
所以:。+是" 1个或多个字符"
答案 2 :(得分:1)
该点匹配除换行符之外的任何字符。 + 是“一个或多个”(等于 {1,} )
答案 3 :(得分:1)
protected override string CleanDataLine(string line)
{
//the regular expression for GlobalSight log
Regex regex = new Regex("\".+\"");
Match match = regex.Match(line);
if (match.Success)
{
string matchPart = match.Value;
matchPart =
matchPart.Replace(string.Format("\"{0}\"",
Delimiter), string.Format("\"{0}\"", "*+*+"));
matchPart = matchPart.Replace(Delimiter, '_');
matchPart =
matchPart.Replace(string.Format("\"{0}\"", "*+*+"),
string.Format("\"{0}\"", Delimiter));
line = line.Replace(match.Value, matchPart);
}
return line;
}
line
只是一些文字,可能是Hello World
,或者其他任何内容。
new Regex("\".+\"")
\"
是一个转义引号,这意味着它实际上是在寻找以双引号开头的字符串。 .+
表示一次或多次查找不包括换行符的任何字符。
如果它匹配,那么他试图通过抓取值来找出匹配的部分。
然后它变成普通搜索并替换匹配的任何字符串。