我正在用Java开发,我有一个很长的文本字符串,其中包含我需要的关于特定DVD的所有信息。(这是HandBrakeCLI的扫描输出)。我需要构建一个正则表达式,它将捕获我需要的每一位信息,但忽略一些特殊情况。我的程序由DVD、标题、章节和语言对象组成。它的结构是这样的: DVD有标题标题有章节和语言我需要从输出中正则表达式出以下信息:标题编号-语言名称和音轨编号-章节编号
一个给我带来特别麻烦的特殊情况是,一些标题开始扫描,但随后输出显示它们被忽略了,因为它太短了,并且从下一个标题开始。我不知道如何编写一个忽略任何包含它的匹配的正则表达式。我一直很难弄明白这一点!
scan: scanning title (\d+)?.{0,500}(ignoring title)这将捕获所有需要忽略的标题,但我认为我需要一个很长的正则表达式来捕获我需要的所有信息,并忽略特殊情况。如果我能以某种方式将每个有效的标题扫描绑定到一个组中,那就太好了!非常感谢你的帮助!
以下是输出的示例:
[11:25:53] scan: DVD has 9 title(s)
[11:25:53] scan: scanning title 1
[11:25:53] scan: opening IFO for VTS 1
[11:25:53] scan: duration is 00:00:00 (76 ms)
[11:25:53] scan: ignoring title (too short)
[11:25:53] scan: scanning title 2
[11:25:53] scan: opening IFO for VTS 2
[11:25:53] scan: duration is 01:59:27 (7167153 ms)
[11:25:53] pgc_id: 1, pgn: 1: pgc: 0x1bad980
[11:25:53] scan: vts=2, ttn=1, cells=0->17, blocks=4->3, 1906832 blocks
[11:25:53] scan: checking audio 1
[11:25:53] scan: id=80bd, lang=English (AC3), 3cc=eng ext=0
[11:25:53] scan: checking audio 2
[11:25:53] scan: id=81bd, lang=Deutsch (AC3), 3cc=deu ext=0
[11:25:53] scan: checking audio 3
[11:25:53] scan: id=82bd, lang=English (AC3), 3cc=eng ext=0
[11:25:53] scan: checking audio 4
[11:25:53] scan: id=83bd, lang=Espanol (AC3), 3cc=spa ext=0
[11:25:53] scan: checking audio 5
[11:25:53] scan: id=84bd, lang=Francais (AC3), 3cc=fra ext=0
[11:25:53] scan: checking audio 6
[11:25:53] scan: id=85bd, lang=Italiano (AC3), 3cc=ita ext=0
[11:25:53] scan: checking audio 7
[11:25:53] scan: id=86bd, lang=Portugues (AC3), 3cc=por ext=0
[11:25:53] scan: checking audio 8
[11:25:53] scan: id=87bd, lang=Samoan (AC3), 3cc=smo ext=0
[11:25:53] scan: checking subtitle 1
[11:25:53] scan: id=20bd, lang=English, 3cc=eng
[11:25:53] scan: title 2 has 18 chapters
[11:25:53] scan: chap 1 c=0->0, b=4->51422 (51419), 127306 ms
[11:25:53] scan: chap 2 c=1->1, b=51423->79617 (28195), 100277 ms
[11:25:53] scan: chap 3 c=2->2, b=79618->170050 (90433), 233291 ms
[11:25:53] scan: chap 4 c=3->3, b=170051->192087 (22037), 85367 ms
[11:25:53] scan: chap 5 c=4->4, b=192088->327371 (135284), 568451 ms
[11:25:53] scan: chap 6 c=5->5, b=327372->431726 (104355), 283191 ms
[11:25:53] scan: chap 7 c=6->6, b=431727->441166 (9440), 40203 ms
[11:25:53] scan: chap 8 c=7->7, b=441167->675145 (233979), 977815 ms
[11:25:53] scan: chap 9 c=8->8, b=675146->870812 (195667), 778680 ms
[11:25:53] scan: chap 10 c=9->9, b=870813->959026 (88214), 218223 ms
[11:25:53] scan: chap 11 c=10->10, b=959027->1134726 (175700), 748540 ms
[11:25:53] scan: chap 12 c=11->11, b=1134727->1375583 (240857), 1013772 ms
[11:25:53] scan: chap 13 c=12->12, b=1375584->1452670 (77087), 204138 ms
[11:25:53] scan: chap 14 c=13->13, b=1452671->1461940 (9270), 41303 ms
[11:25:53] scan: chap 15 c=14->14, b=1461941->1698075 (236135), 1069800 ms
[11:25:53] scan: chap 16 c=15->15, b=1698076->1826069 (127994), 367324 ms
[11:25:53] scan: chap 17 c=16->16, b=1826070->1906831 (80762), 309385 ms
[11:25:53] scan: chap 18 c=17->17, b=0->3 (4), 76 ms
[11:25:53] scan: aspect = 0
[11:25:53] scan: scanning title 3标题3类似于标题2,标题5类似于标题1
发布于 2011-10-18 00:50:29
好吧,这并不完全是正确的解决方案,但我找到了一个很好的解决方案。相反,我决定为每个标题创建一个唯一的字符串。真的很简单。一旦程序到达匹配的第一行:scan: scanning title (\d+?),我就创建了一个新的title对象,并为它启动了一个新的string构建器。然后,我对每个单独的字符串进行正则表达式。如果它与ignore匹配,那么我将忽略它,从而处理该异常。从那里,可以很容易地按标题来正则表达式我需要的信息。程序现在工作了,我很高兴地说,当你把我在上面花费的所有时间加起来,并将它与我使用GUI分别排队的时间进行比较时,我节省了大约...呃..。5个小时...所以这不是一个巨大的节省,但它比点击一百万次要好一百万倍。哈哈,不管怎样,感谢所有在这个项目上提供帮助的人(包括其他关于这个项目的帖子)。
https://stackoverflow.com/questions/7756587
复制相似问题