首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将用于从python跳过缺失信息的正则表达式转换为java-7。

将用于从python跳过缺失信息的正则表达式转换为java-7。
EN

Stack Overflow用户
提问于 2013-01-04 07:50:25
回答 1查看 313关注 0票数 1

我有以下测试用例,我需要为这些测试用例开发一个正则表达式,以便捕获指定组中的特定信息部分。

测试用例如下:

代码语言:javascript
复制
Title v01
Title v01 c01
Title v01 c01-02
Title c01
Title c01-02

要寻找的组是:标题、卷、ChapterStart和ChapterEnd。例如,在下面的情况下,它们将捕获

代码语言:javascript
复制
Title v02 c05-08
1      2   3  4

1.        Title: "Title"
2.       Volume: "02"
3. ChapterStart: "05"
4.   ChapterEnd: "08"

唯一的强制组是Title,其他的是可选的,在上面列出的其他用例场景中可以看到。

到目前为止,我已经想出了以下方法,成功地治疗了前三例:

代码语言:javascript
复制
(?P<Title>.*)((((( |\.)v))(?P<Volume>\d+))(( |\.)c(?P<ChapterStart>\d+)(-(?P<ChapterEnd>\d+))?)?)

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

我现在有两个问题:

  1. 如何使正则表达式处理卷信息丢失的情况。
  2. 如何将这个正则表达式从python兼容性转换为Java1.7regex兼容性,后者目前无法与完全相同的测试用例匹配。(我只通过删除‘P’来更改命名的组表示法)

任何帮助都将不胜感激。

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

EN

回答 1

Stack Overflow用户

发布于 2013-01-10 19:32:31

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

代码语言:javascript
复制
(?<Title>.*?)( v(?<Volume>\d+))?( c(?<ChapterStart>\d+)(-(?<ChapterEnd>\d+))?)?

请注意以下几点:

  • 这使用Java 7的命名组。
  • 对于标题,我使用的是一个reluctant quantifier,这样它就不会占用整个字符串,而不会为卷和章节留下任何东西。您可以阅读reluctantgreedypossessive模式api文档中的量词。
  • 您的卷组之后没有?,我相信这会导致Title c01不匹配章节。
  • 在v和c之前有一个( |\.)部分,因为它与您的测试用例不匹配,并且您似乎没有指示可以使用句点而不是空格。如果有必要的话,你可能得把它放回去。

可以自由地适应你的目标。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14153210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档