像字符串一样创建String.Format并提取子字符串

时间:2016-02-17 04:50:35

标签: c# .net regex string

首先,我想从分隔符之间的字符串中提取子字符串到参数中,并使字符串变成String.Format的字符串。

示例

来源:

<Hello> [World]!

输出:

结果字符串

<{0}> [{1}]!

数组中提取的参数

0: Hello
1: World

有许多字符串包含未知数量的参数。此外,还有两种类型的分隔符:<>[]

我使用正则表达式搜索字符串提取示例,但大多数都是基于静态字符串格式。但是,字符串的格式是未知的,在这种情况下可能包含也可能不包含任何分隔符。

编辑: 其他分隔符可能有分隔符包装,但分隔符将始终成对出现。

示例

来源:

[<Hello> World]!

输出:

结果字符串

[{0}]!

数组中提取的参数

0: <Hello> World

仅考虑外部分隔符。里面的任何东西都应该是参数。

1 个答案:

答案 0 :(得分:3)

您可以尝试使用正则表达式来解析匹配的<>[]集。然后使用regex replacecustom MatchEvaluator

这样的事可能有用:

var regex = new Regex(@"(?<=\<).*(?=\>)|(?<=\[).*(?=\])");
var input = "<Hello> [World]!";
var index = 0;
var replacements = new List<string>();
var formatString = regex.Replace(input, (m) => 
{
    replacements.Add(m.Value);
    return String.Format("{{{0}}}", index++);
});

我还没有真正处理包含<>[]的输入字符串,但你可以弥补和转义模式并处理它。原始正则表达式基于this answer

修改: Here's a .NET Fiddle for it...