基于模式更智能的字符串替换

时间:2014-11-26 16:39:57

标签: c# regex

我有一个看起来像这样的字符串:

string1 + \t\t\t\t\t\t\t + string2

string1可以是任何内容,string2可以是以下之一:显示,搜索,费用。对于逃脱的角色,有时我得到10,有时我得到5,有时我得到一些N ...我只期待\tstring1之间的一个string2字符。

到目前为止我所拥有的:

string newLine0 = line.Replace("\t\t\t\t\t\t\t\t\t\t\t\t\t\tDisplay", "\tDisplay");
string newline1 = newLine0.Replace("\t\tFee", "\tFee");
string newLine2 = newline1.Replace("\t\tSearch", "\tSearch");
string newLine3 = newLine2.Replace("\t\t\t\t\t\t\t\t\t\t\t\tDisplay", "\tDisplay");
string newLine4 = newLine3.Replace("\t\tDisplay", "\tDisplay");

使用更清晰的代码和更少的变量,有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

您似乎只需使用一个\t替换多个\t的实例:

string newLine = Regex.Replace(line, @"\t{2,}", "\t");

如果您只想删除其中一个字词DisplayFeeSearch,请使用

string newLine = Regex.Replace(line, @"\t{2,}(?=Display|Fee|Search)", "\t");

答案 1 :(得分:0)

如果N个标签位于单词之前,则将N设为1:

string newLine = Regex.Replace(line, @"\b(\t+)(\t\w)\2\b", "$+");

\b - 从单词边界开始

(\t+) - 匹配一个或多个标签(第一个分组)

(\t\w) - 后面只有一个标签和一个单词(第二个分组)

\2 - 匹配第二个捕获的组

$+ - 仅将整个匹配(/\t*\w/)替换为第二个匹配的组(/\t\w)。