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