2015-06-21 93 views
0

我正在编程的语言是Objective C,尽管这可能对解决此问题没有任何影响。正则表达式分组

给定0至3次出现的6, 7, 9, 11 and 13及其修饰符b#,如何编写正则表达式以便您可以检索每个值的分组?正则表达式甚至是最好的解决方案吗?下面的是一些字符串需要匹配的一些例子:

Example 1: 7#9 //The groupings should be 7 #9 

Example 2: 7b9#13 //The groupings should be 7 b9 #13 

Example 3: b6 //The grouping should be b6 

Example 4: 7#1311 //The groupings should be 7 #13 11 

Example 5: 7911 //The groupings should be 7 9 11 

要匹配只是一个像#13号,我试过如下:

([#b]?13|11|9|7|6)? 

它为#13场比赛,而不是#11。我很困难。

回答

0

的主要问题是,[#| B]集不被施加到13,图11,图9中, 7和6个人。另外,我复制它来处理多个分组。这里的修复:

([b#]?13|[b#]?11|[b#]?9|[b#]?7|[b#]?6)?([b#]?13|[b#]?11|[b#]?9|[b#]?7|[b#]?6)?([b#]?13|[b#]?11|[b#]?9|[b#]?7|[b#]?6)?([b#]?13|[b#]?11|[b#]?9|[b#]?7|[b#]?6)? 

对于字符串b9#1113现在分组如下:

组1:B9
第2组:#11
第3组:13

0

你错位了括号。所述答案应该是这样的:

[#B](13 | 11 | 9 | 7 | 6)

哪里它看起来为每个数的组合与可能#B?

代替

([#B] 13 |?11 | 9 | 7 | 6)?

在那里只查找的#13或11或9的组合..等

+0

是啊,我想一个解决方案就像那样。唯一的问题是匹配。例如,对于#139,它创建了4个组:#13,13,9和9。我如何区分我想要的群体和我不想要的群体? – 02fentym

+0

我更新了我的答案。请注意,我删除了最后一个“?”因为它也寻找零长度匹配,这意味着总是创建一个额外的组,即使没有匹配你的正则表达式 – IMAMBAKS

+0

嗯......它仍然#13,9#11等失败。 :https://regex101.com/r/nJ1dP6/1 – 02fentym