我有以下测试用例,我需要为其开发一个正则表达式,以便捕获命名组中的特定信息部分。
测试用例是:
Title v01
Title v01 c01
Title v01 c01-02
Title c01
Title c01-02
要查找的组是:Title、Volume、ChapterStart 和 ChapterEnd。例如在下面的情况下,这些会捕获
Title v02 c05-08
1 2 3 4
1. Title: "Title"
2. Volume: "02"
3. ChapterStart: "05"
4. ChapterEnd: "08"
唯一的强制性组是 Title,其他是可选的,如上面列出的其他用例场景中所示。
到目前为止,我能够想出以下正则表达式,它成功地处理了前三种情况:
(?P<Title>.*)((((( |\.)v))(?P<Volume>\d+))(( |\.)c(?P<ChapterStart>\d+)(-(?P<ChapterEnd>\d+))?)?)
但是,我不知道如何在一个正则表达式中处理最后两种情况,而不必回收组名。组名是静态的,因为接收此正则表达式的程序使用它们来提取特定的信息片段(系列名称、标题、卷和章节编号等)
我现在有两个问题:
如何让正则表达式处理卷信息缺失的情况。
如何将此正则表达式从 python re 兼容性转换为 Java 1.7 正则表达式兼容性,目前无法匹配完全相同的测试用例。(我只通过删除“P”来更改命名组符号)
任何帮助将不胜感激。
注意:标题可以是任意数量的单词,包含大写字母、小写字母、数字、特殊字符、unicode 字符,以空格、点、下划线和/或破折号等分隔。所以唯一的方法是识别结尾是否查找前面有空格字符(空格、点、下划线等)或到达字符串末尾的 av 或 c。