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