我有以下測試用例,我需要開發一個正則表達式以捕獲指定組中的特定信息部分。轉換正則表達式以跳過缺少的信息從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前面有一個空格字符(空格,點,下劃線等)或者如果它到達字符串的末尾。