正则表达式搜索* Stream#0:0(und):Video:*或* Stream#0:0:输出python3.5中的音频*

时间:2017-06-13 07:46:26

标签: regex python-3.5

我正在尝试解析输出,如下所示:

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(...)的输出为无,所以这不是正确的正则表达式,用于在输出中找到模式

1 个答案:

答案 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]*?)匹配的文字。