我有一个看起来像这样的字符串:
string1
+ \t\t\t\t\t\t\t
+ string2
string1
可以是任何内容,string2
可以是以下之一:显示,搜索,费用。对于逃脱的角色,有时我得到10,有时我得到5,有时我得到一些N ...我只期待\t
和string1
之间的一个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");
使用更清晰的代码和更少的变量,有更好的方法吗?
答案 0 :(得分:3)
您似乎只需使用一个\t
替换多个\t
的实例:
string newLine = Regex.Replace(line, @"\t{2,}", "\t");
如果您只想删除其中一个字词Display
,Fee
或Search
,请使用
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
)。