【发布时间】:2015-10-05 16:27:12
【问题描述】:
假设我有一组字符串,比如说:
#1: "A-B-B-C-C"
#2: "A-A-A-A-A-A-A"
#3: "B-B-B-C-A-A"
现在我想检查某些模式是否出现在序列的第一个、中间或最后三分之一。因此,我希望能够制定这样的规则:
Match the string if, and only if,
marker X occurs in the first/middle/last third of the string
例如,我可能想要匹配在前三分之一中具有A 的字符串。考虑到上面的序列,我会匹配#1 和#2。我还可以匹配在最后三分之一中具有A 的字符串。这将匹配 #2 和 #3。
如何编写一个通用代码/正则表达式模式,可以将各种此类规则作为输入,然后匹配适当的子序列?
【问题讨论】:
-
听起来不像是用正则表达式解决的问题。用函数定义规则,对输入字符串进行操作更灵活。
-
@nhahtdh:它可能同时需要函数和正则表达式(因为我要匹配的任何内容都必须用正则表达式定义,即使它很简单)。
-
字符串是否总是相同的固定长度?
-
@rloth:不,长度是动态的。
-
我认为正则表达式没有办法将字符串动态分成三部分,因为正则表达式不能count。但是,您可以基于动态变量动态构造正则表达式量词,其运行时已知字符串长度(除以 3)。然后找到你想要的东西是微不足道的。