正则表达式匹配可变长度字符串的前缀和后缀

时间:2012-03-14 00:10:39

标签: .net regex

我已经检查了其他几个问题,例如thisthisthisthisthis,但我似乎无法从这些问题中找出我的问题。很可能我错过了一些简单的东西,但我不知道是什么。

我有一个如下字符串: This is some random text{colA}that needs{COLBB} to be matched.

我需要匹配ABB,但没有别的。规则如下

  • 前缀仅为{col(不区分大小写)
  • 后缀只会是}
  • 要匹配的字符只是字母
  • 匹配必须不区分大小写
  • 匹配仅为1或2个字符
  • 在前缀/后缀
  • 之前或之后不能假设分词

我设法得到了这个:(?i:[a-z]{1,2}(?<={col[a-z]{1,2})(?=}))匹配{colaa}但不匹配{cola}(在{cola}的情况下,当需要返回时返回la a)。我无法弄清楚如何调整它以适应两种不同的匹配情况。

我在.Net工作,非常感谢我能帮助解决这个问题。我觉得这么近,但距离很远!

2 个答案:

答案 0 :(得分:1)

关键是将lookbehind断言移到模式的开头,这样我们就可以指定 exact 前缀,而不必在前缀 plus 上断言匹配的部分。所以:

(?i:(?<=\{col)[a-z]{1,2}(?=\}))

答案 1 :(得分:1)

试试这个:

(?i:(?<={col)[A-Za-z]{1,2}(?=}))
  • 整个表达式不区分大小写:(?i: … )
  • 我们声称匹配必须前面带有“{col”并带有lookbehind:(?<={col)
  • 我们匹配任何案件的任意一到两个字母:[A-Za-z]{1,2}
  • 我们断言匹配必须跟“}”后跟前瞻:(?=})