RegEx匹配文字字符串集和值范围

时间:2016-11-16 18:30:29

标签: regex

这里有一个涉及RegEx的项目的RegEx noob我需要修改。一直在学习所有这一切。

我需要搜索/验证一组以两个字符串组合(NC或KH)和一个变量数字列表之一开头的值,每个字符串前缀都是唯一的。 NC01-NC13或KH01-11。

我已经能够完成第一个常见的" chunk"这个:

^(NC|KH)0[1-9]$

验证NC01-NC09或KH01-KH09。下一部分完全抛弃我 - 需要将两位数字符的前导字符改为1与0,并将范围限制为0-3为NC,0-1为KH。

我发现在两个字符串之间选择了很多参考资料(我从中获得了(NC | KH)),但没有像根据找到的文本限制以下值那样详细。

非常感谢任何和所有帮助,以及RegEx(目前使用Regular-Expressions.info)的任何好的参考/书籍/教程。

2 个答案:

答案 0 :(得分:1)

这样做的最好方法是将这两个案件完全分开。

layout(matrix(1:30,5,6, byrow = T), respect = T)
par(mar=c(0.2,0.2,0.2,0.2), bty="n", yaxt="n", xaxt="n")

for (N in 1:30){
  X = sample(100, N)
  boxplot(X)
  abline(h=quantile(X, c(0.25, 0.5, 0.75), type=c(5,7)[(N %% 2) + 1]), col="red", lty=2)
}

您可能希望将其中一些内部捕获组转换为非捕获组,但这会使正则表达式难以阅读。

编辑:您也可以通过积极的观察来做到这一点。 编辑:这是一个使用lookbehind的正则表达式。这里很麻烦,而且这里并不是真的有必要,但希望能证明这个实用程序:

onCreate

答案 1 :(得分:0)

坚持NCKH选项的原始想法,对数字做同样的事情,试试这个:

^(NC|KH)(0[1-9]|1[0-3])$

希望有意义

修改

基于@ Patrick在下面的评论,并坚持这个原始答案,你可以使用这个(虽然我打赌有更好的方法):

^(NC|KH)(0[1-9]|1[0-1])|(NC1[2-3])$