как извлечь форматирующую часть из строки - PullRequest
0 голосов
/ 01 мая 2009

Как извлечь из строки только часть форматирования. Например: если у меня есть строка = "Предупреждение: произошла ошибка {0}. Модуль {1, 9} выполнил {2: 0%}." Я хотел бы извлечь {0}, {1,9} и {2: 0%} в массив sting. Есть ли регулярное выражение или что-то, что можно сделать иначе, чем мой способ зацикливания строки с Substring indexof '{' и '}' попеременно?

Ответы [ 4 ]

1 голос
/ 01 мая 2009

Следующий код отличается от других ответов тем, что в нем используется жадное сопоставление (". *?"):

    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);
        }
    }
1 голос
/ 01 мая 2009

Не будет ли работать какой-либо вариант "\ {[^}] + \}"? Запустите его, найдя совпадения и подстроки от начала до конца совпадения.

0 голосов
/ 01 мая 2009

В 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
}
0 голосов
/ 01 мая 2009
new Regex(@"\{[0-9:,% .]+\}");

Возможно, вам придется настроить / настроить его для учета любых дополнительных параметров форматирования, которые вы не предоставили в своем примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...