正则表达式的外观和匹配IF

时间:2015-08-05 21:10:10

标签: regex python-2.7 regex-lookarounds

我有点卡在试图弄清楚如何在if-else类型的情况下为我工作。当我尝试在this site上实现if-else成语时,我最终得到了一个错误。这就是我所拥有的:

MCV(1|0)(\d)(?<!1)\1[0-6]|[0-9]

这是我想要匹配的一个例子

这些

MVC123 MVC034 MVC001 MVC196

不是这些

MCV197 MCV000 MCV876

因此匹配显示MCV的位置和数字组件的范围是1-196

2 个答案:

答案 0 :(得分:1)

这是你的正则表达式细分:

Post.find({
  include: {
    relation: 'owner', // include the owner object
    scope: { // further filter the owner object
      fields: ['username', 'email'], // only show two fields
      include: { // include orders for the owner
        relation: 'orders', 
        scope: {
          where: {orderId: 5} // only select order with id 5
        }
      }
    }
  }
}, function() { ... });
  1. MCV(1|0)(\d)(?<!1)\1[0-6]|[0-9] - 匹配 MCV 字面意思
  2. MCV - 匹配(1|0)1
  3. 0 - 匹配数字
  4. (\d) - 确保最后一位数字不是(?<!1)
  5. 1 - 完全匹配第一组匹配的内容(如\1匹配(1|0) - 匹配1,否则 - 1
  6. 0 - 匹配[0-6]0
  7. 的数字
  8. 6 - 或者,将上述中的所有内容与|[0-9]0
  9. 中的一位数相匹配

    关于什么是真正的解决方案:

    9

    1-196部分:

    1. MVC(00[1-9]|0[1-9]\d|1[0-8]\d|19[0-6]) - 如果我们从00[1-9]开始,则第三个数字不应该是00,又名 1到9
    2. 0 - 如果我们以0[1-9]\d开头,而第二个数字不是0,那么任何数字都可以接受第三个位置,也就是 10到99
    3. 0 - 如果我们从1[0-8]\d和第二个数字开始,这不是1那么任何数字都可以接受第三个位置,也就是 100到189
    4. 9 - 如果我们从19[0-6]开始,那么只有190的数字可以接受第三个位置,即 190到196

答案 1 :(得分:1)

您可以使用此正则表达式:

\bMVC(0*[1-9][0-9]?|1[0-8][0-9]|19[0-6])\b

RegEx Demo