在简单的RegEx上解决了一些问题之后:我有一块Regex,目前正在执行以下操作:
if(Regex.IsMatch(ffmpegOutputToParse, "x1080|x720"))
{
return true;
}
ffmpegOutputToParse = "Duration: 00:00:28.52, start: 8.000000, bitrate: 7361 kb/s
Stream #0.0: Audio: wmav2, 44100 Hz, stereo, s16, 192 kb/s
Stream #0.1: Video: vc1, yuv420p, 1280x720, 5942 kb/s, 29.97 tb(r)
At least one output file must be specified"
此代码工作正常。我现在要做的代码是不仅要精确匹配“x720”或“x1080”值,而且如果范围在720-1080之间,也会返回true。
非常感谢
答案 0 :(得分:4)
您不必使用正则表达式来完成所有事情。可以用正则表达式做一些事情,用非正则表达式代码做其他事情。
在你的情况下,这样做(这是在Perl,但你可以得到这个想法):
if ( $ffmpegOutputToParse =~ /x(\d{3,4})/ ) { # Match an x followed by 3 or 4 digits
$rate = $1; # $1 is the first capture group;
$is_ok = ($rate >= 720 && $rate <= 1080); # Is the rate between acceptable values?
....
正则表达式用于匹配模式,而不是比较数值。您可以执行类似
的操作x(7[2-9][0-9]|[89][0-9][0-9]|10[0-7][0-9]|1080)
但这对于读者来说不那么清楚远正在做什么。此外,如果您决定将可接受的费率从720-1080更改为512-1400怎么办?您要么在我的版本中更改一行,要么在@TimPietzcker的版本中重写整个正则表达式。
答案 1 :(得分:3)
在这种情况下,您需要拼出所有这些值的文本表示:
@"x(7[2-9][0-9]|[89][0-9][0-9]|10[0-7][0-9]|1080)\b"
<强>解释强>
x # Match x
( # Match either...
7[2-9][0-9] # 720-799
| # or
[89][0-9][0-9] # 800-999
| # or
10[0-7][0-9] # 1000-1079
| # or
1080 # 1080
) # End of alternation
\b # Make sure the number ends here
答案 2 :(得分:0)
我远不是正则表达式大师,但这应该有用,虽然有人可能会带来更优化的东西..
x(72\d)|(7[3-9]\d)|([89]\d\d)|(10[0-7]\d)|(1080)
答案 3 :(得分:0)
像(\ d +)x(\ d +)这样的正则表达式可能会让您捕获视频分辨率。您可以将字符串转换为整数,然后进行比较。正则表达式并不是数字比较的正确工具,即使它可以工作。