将一个用于从Python转到Java-7的跳过缺失信息的常见表达式转换为中文标题

2024-10-04 07:29:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下测试用例,我需要为它们开发一个正则表达式,以便在命名组中捕捉特定的信息部分。在

测试用例是:

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+))?)?)

但是,我不知道如何在一个正则表达式中处理最后两个大小写,而不必循环使用组名。组名是静态的,因为接收此正则表达式的程序使用它们来提取特定的信息片段(系列名称、标题、卷和章节号等)

我现在有两个问题:

  1. 如何使正则表达式处理缺少体积信息的情况。

  2. 如何将这个正则表达式从python重新兼容转换为java1.7regex兼容性,后者目前无法与完全相同的测试用例匹配。(我只通过删除'P'来更改命名组符号。

任何帮助将不胜感激。在

注意:标题可以是包含大写字母、小写字母、数字、特殊字符、unicode字符(用空格、点、下划线和/或破折号等分隔)的任意数量的单词。因此,识别结尾的唯一方法是找到一个v或c前面有空格字符(空格、点、下划线,或者它到达了绳子的末端。在


Tags: 信息标题title测试用例用例字符命名例子
1条回答
网友
1楼 · 发布于 2024-10-04 07:29:57

我对正则表达式中括号的数量感到惊讶,所以我重写了它。我想到的是:

(?<Title>.*?)( v(?<Volume>\d+))?( c(?<ChapterStart>\d+)(-(?<ChapterEnd>\d+))?)?

请注意以下几点:

  • 它使用Java7的命名组
  • 对于title,我使用了一个reluctant quantifier,这样它就不会占用整个字符串,而不会给卷和章节留下任何内容。您可以阅读reluctantgreedy、和possessive量词。在
  • 你的卷组后面没有?,我相信这会导致Title c01与章节不匹配。在
  • 你的v和c之前有一个( |\.)部分。我去掉了它们,因为它与您的测试用例不匹配,而且您似乎没有指明可以使用句点来代替空格。如果需要的话,你可以把它放回去。在

随时适应你的目标。在

相关问题 更多 >