我有以下测试用例,我需要为它们开发一个正则表达式,以便在命名组中捕捉特定的信息部分。在
测试用例是:
Title v01
Title v01 c01
Title v01 c01-02
Title c01
Title c01-02
要查找的组有:Title、Volume、ChapterStart和ChapterEnd。例如在下面的例子中
^{pr2}$唯一必须的组是Title,其他组是可选的,如上面列出的其他用例场景所示。在
到目前为止,我想出了以下成功治疗前三个病例的正则表达式:
(?P<Title>.*)((((( |\.)v))(?P<Volume>\d+))(( |\.)c(?P<ChapterStart>\d+)(-(?P<ChapterEnd>\d+))?)?)
但是,我不知道如何在一个正则表达式中处理最后两个大小写,而不必循环使用组名。组名是静态的,因为接收此正则表达式的程序使用它们来提取特定的信息片段(系列名称、标题、卷和章节号等)
我现在有两个问题:
如何使正则表达式处理缺少体积信息的情况。
如何将这个正则表达式从python重新兼容转换为java1.7regex兼容性,后者目前无法与完全相同的测试用例匹配。(我只通过删除'P'来更改命名组符号。
任何帮助将不胜感激。在
注意:标题可以是包含大写字母、小写字母、数字、特殊字符、unicode字符(用空格、点、下划线和/或破折号等分隔)的任意数量的单词。因此,识别结尾的唯一方法是找到一个v或c前面有空格字符(空格、点、下划线,或者它到达了绳子的末端。在
我对正则表达式中括号的数量感到惊讶,所以我重写了它。我想到的是:
请注意以下几点:
reluctant quantifier
,这样它就不会占用整个字符串,而不会给卷和章节留下任何内容。您可以阅读reluctant
、greedy
、和possessive
量词。在?
,我相信这会导致Title c01
与章节不匹配。在( |\.)
部分。我去掉了它们,因为它与您的测试用例不匹配,而且您似乎没有指明可以使用句点来代替空格。如果需要的话,你可以把它放回去。在随时适应你的目标。在
相关问题 更多 >
编程相关推荐