具有最后一次出现、前瞻和非唯一条件的正则表达式

Regex with last occurence, lookahead and a not-only condition

我需要一个正则表达式来搜索字符串中的最后一个下划线并匹配如果:

有效案例:

dsafjukfa.abc
dfgdsafdsf_0.abc
eatAda-gfda_fdagfda_asf01.abc
eatgdagfda_fdagfda_asf01_0.abc
eatgdagfda_fdagfda_asf01_1a.abc

无效案例:

asdfsadf_546.abc
eatgdagfda_fdagfda_asf01_1.abc
dsafjukfa.xyz
dfgdsafdsf_0.xyz
eatAda-gfda_fdagfda_asf01.xyz
eatgdagfda_fdagfda_asf01_0.xyz
eatgdagfda_fdagfda_asf01_1a.xyz

我基本上需要最后一次出现的组合,positive/negative 前瞻和一个非唯一数字字符串

Python 正则表达式引擎中的一切都应该 运行。

编辑:自请求以来:部分尝试这样做看起来像

"^[^_]*$"
"(?!.*_)(0|\w*).abc"

但是由于这没有太大帮助,我只是描述了我希望需要的技术。

^[^_]*.abc$|_(?=0\.abc[^_]*$)|_(?=\d*[^\d_][^_]*\.abc[^_]*$)
  1. 完全没有下划线 - ^[^_]*$
  2. 下划线,后跟0.abc - _(?=0\.abc)
  3. 下划线,后跟*.abc,其中*是可变数量的字符,其中至少有一个是数字- _(?=\d*\D.*\.abc)
  4. 我们通过确保在字符串末尾没有下划线来使上述下划线成为最后一个。

See it in action


实现最后一条规则的更具可读性的替代方法是使用单独的前瞻:

^[^_]*.abc$|(?:_(?=0\.abc)|_(?=\d*\D.*\.abc))(?=[^_]*$)

See it in action