正则表达式缩进 - 将制表符保留在行首
本文关键字:保留 行首 制表符 缩进 正则表达式 | 更新日期: 2023-09-27 18:31:01
我在C#中使用正则表达式。我想将匹配项移动到新行并缩进。通过缩进,我的意思是应该保留并添加预先存在的选项卡,这些选项卡存在于包含匹配项的行的开头。
使用一个正则表达式匹配和替换来做到这一点的最佳方法是什么?
例如,匹配逗号后面的单词:
W 1, 2, 3
W 4, 5, 6
W 7, 8, 9
应导致:
W 1,
2,
3
W 4,
5,
6
W 7,
8,
9
我可以匹配(?<=,)
,只需用'n
甚至'n't
替换即可。但是,使用此方法时,每个匹配项的缩进都会重置为一个制表符,并且不遵循预先存在的缩进。
我还尝试使用命名组,例如通过(?<tabs>^'t+|'n't+)
查看现有缩进,以及通过(?<words>(?<=,))
缩进的匹配项。但是,我不知道如何将其组合成一个匹配和一个替换正则表达式模式。
这是我想到的。 它不使用任何正则表达式,因为此问题不需要使用它们。 您可以自己决定这是否适合您:)
工作点小提琴
var input =
@"W 1, 2, 3
W 4, 5, 6
W 7, 8, 9";
var output = string.Empty;
var inputLines = input.Split(''n');
foreach(var inputLine in inputLines) {
// get leading whitespace for line... you can use Regex here to match
// more WS characters if you'd like
var leadingWsAmt = inputLine.Length - inputLine.TrimStart(' ').Length;
var leadingWs = new string(' ', leadingWsAmt);
// trim all strings separated by comma so whitespace is correct in final result
var inputsOnLine = inputLine
.Split(',')
.Select(x => x.Trim());
output += string.Join(",'n"+leadingWs+"'t", inputsOnLine);
// don't put comma after last item
output += "'n"+leadingWs+"'t";
}
output = output.Trim();
Console.WriteLine(output);
// W 1,
// 2,
// 3
// W 4,
// 5,
// 6
// W 7,
// 8,
// 9