当正则表达式中不存在一组时如何匹配名称

问题描述 投票:0回答:2

我坚持遵循正则表达式。我的意图是匹配以下

abc_123_v1_f1_t21 
12c_1sdsd_f1_t1 
Android_v1_t21 

我正在尝试的正则表达式是

_(v[1-9]{1,3}\d?_f[1-9]{1,3}\d?_t[1-9]{1,3}\d?)(?!\d)

如果我的名字不包含序列(v_f_t),我将无法获得正则表达式匹配。 当我有像 without v 或 f 或 t 至少应该存在两个模式时,如何获得正则表达式匹配。 v_t 或 f_v 或 f_t 或 v_f_t 或 f_t_v 等

如果我给 adcg_f1_t1 它应该匹配

如果我给 adcg_v2_f1 它应该匹配

如果我给 adcg_v2_t12 它应该匹配

如何做到这一点?

python regex
2个回答
1
投票

你可以使用

(?:_[vft][1-9]{1,3}\d?){2,3}(?!\d)

请参阅 正则表达式演示

详情

  • (?:_[vft][1-9]{1,3}\d?){2,3}
    - 出现两次或三次
    • _
      - 下划线
    • [vft]
      -
      v
      /
      f
      /
      t
    • [1-9]{1,3}
      - 一位、两位或三位非零数字
    • \d?
      - 可选数字
  • (?!\d)
    - 右侧不允许有数字。

0
投票

正则表达式,

(?:_[vft]\d{1,3}){2}(?:_[vft]\d{1,3})*
满足您的要求。

  • (?:_[vft]\d{1,3}){2}
    :出现两次的非捕获组。该组包含一个
    _
    ,后跟一个
    v
    /
    f
    /
    t
    ,然后依次跟随一到三位数字
  • (?:_[vft]\d{1,3})*
    :非捕获组,出现次数为零到无限次。该组包含一个
    _
    ,后跟一个
    v
    /
    f
    /
    t
    ,然后依次跟随一到三位数字

演示

© www.soinside.com 2019 - 2024. All rights reserved.