【问题标题】:regex lookaround and match IF正则表达式环视和匹配 IF
【发布时间】:2015-08-06 06:01:20
【问题描述】:

对于 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

【问题讨论】:

标签: regex python-2.7 regex-lookarounds


【解决方案1】:

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

MCV(1|0)(\d)(?<!1)\1[0-6]|[0-9]
  1. MCV - 匹配 MCV 字面意思
  2. (1|0) - 匹配 10
  3. (\d) - 匹配一个数字
  4. (?&lt;!1) - 确保最后一位不是1
  5. \1 - 完全匹配第一组匹配的内容(也就是如果 (1|0) 匹配 1 - 匹配 1,否则 - 0
  6. [0-6] - 匹配从 06 的数字
  7. |[0-9] - 或者,匹配上述所有只是从09的一个数字

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

MVC(00[1-9]|0[1-9]\d|1[0-8]\d|19[0-6])

1-196部分:

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

【讨论】:

  • 这比我想要做的更有意义(明确定义实例)。感谢您的解释!
【解决方案2】:

你可以使用这个正则表达式:

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

RegEx Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    相关资源
    最近更新 更多