C# 获取特殊字符前空格的位置
C# get the position of a whitespace before a special char
我正在尝试从字符串中提取 FPS 计数。
此字符串和 FPS 计数可以具有不同的结构和长度。
两个例子是:
" Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 480x480 [SAR 1:1 DAR 1:1], 868 kb/s, 29.97 fps, 29.97 tbr, 11988 tbn (default)"
" Stream #0:0: Video: msmpeg4v3 (MP43 / 0x3334504D), yuv420p, 320x240, 744 kb/s, SAR 1:1 DAR 4:3, 29.97 fps, 29.97 tbr, 29.97 tbn"
获取 FPS 计数位置的唯一常量是字符串中数字前面的“fps”和“,”部分。
我可以用这个获取“fps”的位置:processOutput.IndexOf(" fps")
。
但是因为 FPS 计数可能有不同的长度,所以我不能使用这个:
processOutput.Substring(fpslocation - 5, 5);
有没有办法获取数字前“,”部分的位置?然后我可以将其作为起始索引,将“fps”部分的位置作为结束索引。
还是可以更轻松地过滤掉这个值?
您可以为此使用正则表达式:
var match = Regex.Match(input, @"[\d\.]+(?= fps)")
将查找数字和小数点 ([\d\.]+
) 后跟“fps”的序列;后者未包含在比赛中。
match.Value
将包含数字。
另一种选择是使用带有捕获组的模式,并获取组值。
\b([0-9]+(?:\.[0-9]+)?) fps\b
\b
防止部分匹配的单词边界
(
捕获 组 1
[0-9]+(?:\.[0-9]+)?
将 1+ 个数字 0-9 与可选的小数部分匹配
)
关闭组 1
fps
字面匹配
\b
一个单词边界
看到一个regex demo and a C# demo.
例如
string s = " Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 480x480 [SAR 1:1 DAR 1:1], 868 kb/s, 29.97 fps, 29.97 tbr, 11988 tbn (default)";
Match m = Regex.Match(s, @"\b([0-9]+(?:\.[0-9]+)?) fps\b");
if (m.Success) {
Console.WriteLine(m.Groups[1].Value);
}
输出
29.97
我正在尝试从字符串中提取 FPS 计数。 此字符串和 FPS 计数可以具有不同的结构和长度。
两个例子是:
" Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 480x480 [SAR 1:1 DAR 1:1], 868 kb/s, 29.97 fps, 29.97 tbr, 11988 tbn (default)"
" Stream #0:0: Video: msmpeg4v3 (MP43 / 0x3334504D), yuv420p, 320x240, 744 kb/s, SAR 1:1 DAR 4:3, 29.97 fps, 29.97 tbr, 29.97 tbn"
获取 FPS 计数位置的唯一常量是字符串中数字前面的“fps”和“,”部分。
我可以用这个获取“fps”的位置:processOutput.IndexOf(" fps")
。
但是因为 FPS 计数可能有不同的长度,所以我不能使用这个:
processOutput.Substring(fpslocation - 5, 5);
有没有办法获取数字前“,”部分的位置?然后我可以将其作为起始索引,将“fps”部分的位置作为结束索引。 还是可以更轻松地过滤掉这个值?
您可以为此使用正则表达式:
var match = Regex.Match(input, @"[\d\.]+(?= fps)")
将查找数字和小数点 ([\d\.]+
) 后跟“fps”的序列;后者未包含在比赛中。
match.Value
将包含数字。
另一种选择是使用带有捕获组的模式,并获取组值。
\b([0-9]+(?:\.[0-9]+)?) fps\b
\b
防止部分匹配的单词边界(
捕获 组 1[0-9]+(?:\.[0-9]+)?
将 1+ 个数字 0-9 与可选的小数部分匹配
)
关闭组 1fps
字面匹配\b
一个单词边界
看到一个regex demo and a C# demo.
例如
string s = " Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 480x480 [SAR 1:1 DAR 1:1], 868 kb/s, 29.97 fps, 29.97 tbr, 11988 tbn (default)";
Match m = Regex.Match(s, @"\b([0-9]+(?:\.[0-9]+)?) fps\b");
if (m.Success) {
Console.WriteLine(m.Groups[1].Value);
}
输出
29.97