如何从字符串中提取格式化部分

时间:2009-04-30 23:50:21

标签: c# regex

如何从字符串中仅提取格式化部分。例如: 如果我有一个字符串=“警告:错误{0}已经发生。{1,9}模块已完成{2:0%}。” 我想将{0},{1,9}和{2:0%}提取到一个sting数组中。是否有正则表达式或其他可以做的事情,而不是我的方式循环使用子串索引'{'和'}'交替?

4 个答案:

答案 0 :(得分:1)

“\ {[^}] + \}的某些变体”不起作用吗?通过从匹配的开始到结束找到匹配和子串来运行它。

答案 1 :(得分:1)

以下代码与其他答案的不同之处在于它使用非贪婪匹配(“。*?”):

    private static void Main(string[] args) {
        const string input = "Warning: the error {0} has occurred. {1, 9} module has {2:0%} done.";
        const string pattern = "{.*?}"; // NOTE: "?" is required here (non-greedy matching).
        var formattingParts = Regex.Matches(input, pattern).Cast<Match>().Where(item => item.Success).Select(item => item.Groups[0].Value);
        foreach (var part in formattingParts) {
            Console.WriteLine(part);
        }
    }

答案 2 :(得分:0)

new Regex(@"\{[0-9:,% .]+\}");

您可能需要调整/调整它以考虑您在示例中未提供的任何其他格式选项。

答案 3 :(得分:0)

在Java中,Matcher类采用正则表达式并返回所有匹配的子字符串。

例如:

String str = "Warning: the error {0} has occurred. {1, 9} module has {2:0%} done.";

Matcher matcher = pattern.matcher( "{.*}");
while (matcher.find()){
    String matched = matcher.group()
    \\do whatever you want with matched
}