【发布时间】:2015-07-16 08:51:30
【问题描述】:
假设我的文本字符串看起来像这样:
A-B-C-I1-I2-D-E-F-I1-I3-D-D-D-D-I1-I1-I2-I1-I1-I3-I3
在这里我想识别标记序列(A 是一个标记,I3 是一个标记等)导致 到一个包含 仅 个包含 I3 的 IX 标记(即 I1、I2 或 I3)。该子序列的长度可以为 1(即为单个 I3 标记),也可以为无限长度,但始终需要包含至少 1 个 I3 标记,并且只能包含 IX 标记。在导致IX 子序列的子序列中,可以包括I1 和I2,但不能包括I3。
在上面的字符串中我需要识别:
A-B-C-I1-I2-D-E-F
导致I1-I3 子序列包含I3
和
D-D-D-D
导致I1-I1-I2-I1-I1-I3-I3 子序列至少包含1 个I3。
这里有几个额外的例子:
A-B-I3-C-I3
从这个字符串我们应该识别A-B,因为它后面跟着一个包含I3的子序列1,还有C,因为它后面跟着一个包含I3的子序列1。
和:
I3-A-I3
这里应该识别A,因为它后面跟着一个包含I3的子序列1。第一个I3 本身不会被识别,因为我们只对后面跟着包含I3 的IX 标记子序列的子序列感兴趣。
如何编写一个通用函数/正则表达式来完成这项任务?
【问题讨论】:
-
1.对于序列 A-B-I3-C-I3,答案应该是什么? [“A B”、“C”] 还是别的什么?
-
2.对于序列 I3-A-I3,答案应该是什么?
标签: regex r string-matching