我正在尝试解析输出,如下所示:
b"Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '../abc/def/vid.mp4':\n Metadata:\n major_brand : isom\n minor_version : 512\n compat
ible_brands: isomiso2avc1mp41\n encoder : Lavf56.40.101\n Duration: 00:03:40.36, start: 0.000000, bitrate: 445 kb/s\n Stream #0:0(und): Video: h264 (Main) (avc1 /
0x31637661), yuv420p, 480x360 [SAR 1:1 DAR 4:3], 311 kb/s, 29.92 fps, 29.92 tbr, 90k tbn, 59.83 tbc (default)\n Metadata:\n handler_name : VideoHandler\n Stream #
0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 125 kb/s (default)\n Metadata:\n handler_name : SoundHandler\nOutput #0, null, to 'pipe:':\n M
etadata:\n major_brand : isom\n minor_version : 512\n compatible_brands: isomiso2avc1mp41\n encoder : Lavf56.40.101\n Stream #0:0(und): Video: rawvi
deo (I420 / 0x30323449), yuv420p, 480x360 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 29.92 fps, 29.92 tbn, 29.92 tbc (default)\n Metadata:\n handler_name : VideoHandler\n
encoder : Lavc56.60.100 rawvideo\n Stream #0:1(und): Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s (default)\n Metadata:\n handler_name : SoundHan
dler\n encoder : Lavc56.60.100 pcm_s16le\nStream mapping:\n Stream #0:0 -> #0:0 (h264 (native) -> rawvideo (native))\n Stream #0:1 -> #0:1 (aac (native) -> pcm_s1
6le (native))\nPress [q] to stop, [?] for help\n[null @ 0x7af4c0] Encoder did not produce proper pts, making some up.\nframe= 1434 fps=0.0 q=-0.0 size=N/A time=00:00:48.06 bitra
te=N/A \rframe= 2718 fps=2715 q=-0.0 size=N/A time=00:01:30.97 bitrate=N/A \rframe= 4183 fps=2785 q=-0.0 size=N/A time=00:02:19.94 bitrate=N/A \rframe= 5494 fps=2743 q=
-0.0 size=N/A time=00:03:03.78 bitrate=N/A \rframe= 6590 fps=2765 q=-0.0 Lsize=N/A time=00:03:40.35 bitrate=N/A \nvideo:618kB audio:37960kB subtitle:0kB other streams:0kB
global headers:0kB muxing overhead: unknown\n"
我想在其中找到模式,其起点如下:
Stream #0:0(und): Video:
或模式,如下所示:
Stream #0:0: Audio:
所以,我在python3.5中尝试了这个正则表达式:
re.search("^\s*Stream[\s.]*:\s(Video|Audio)[\s.]*", data)
因为输出(需要解析)是字节字符串,所以我使用output.decode("utf-8")
转换了它。
但是,re.search(...)
的输出为无,所以这不是正确的正则表达式,用于在输出中找到模式 ?
答案 0 :(得分:2)
Glide.with(this).load("http://yourURL.com/image").into(imageView);
匹配0个或更多字符[\s.]*
(点)或空格(.
)。
此外,您需要实际获取它们之后的文本,因此您需要一个点匹配模式,可以跨越直到下一个"关键字"或者字符串的结尾。
所以,我建议
\s
请参阅regex demo
<强>详情:
(?m)^\s*Stream.*?(?:Audio|Video):\s*([\s\S]*?)(?=^\s*Metadata:|\Z)
- (?m)
内联修饰符re.M
- 开始行 ^
- 0+ whitespaces \s*
- 文字字符串Stream
- 除了换行符之外的任何0 +字符,尽可能少,
直至第一...... .*?
- (?:Audio|Video):
或Audio:
Video:
- 0+ whitespaces \s*
- 任意0个字符,尽可能少,直到第一个...... ([\s\S]*?)
- 两种选择中的任何一种:
(?=^\s*Metadata:|\Z)
- 一行,空格和^\s*Metadata:
substring Metadata:
- 或|
- 字符串的结尾。使用注意:如果您使用\Z
运行该文字,则只能获得与([\s\S]*?)
匹配的文字。