繁体   English   中英

以固定的总长度匹配两个连续的序列

[英]Match two consecutive sequences with fixed overall length

我想匹配所有以1至4(小写)字母开头,后跟1至4位数字的字符串,并且该序列的总长度(字母+数字)应为5。字母和数字不得混合。 但是,实际字符串要长得多,并且此5序列后没有任何明显的单词边界(例如,可以跟随[a-z0-9] )。 然而,正则表达式只应与前5个字符有关。

例如:

  • 正匹配项: a1111aa111abc12defabc12345 ,...
  • 否定匹配: a1a1aaa11aaa111aaaa x ,...

所以我需要类似^([az]{1,4})[0-9]{5 - length of \\1}

这个问题似乎有点相关,但是我不知道如何使第二组的长度取决于第一组。 该答案建议对所有可能的字符进行先行查找,但不能防止混合。

我不想只对字符串的前五个字符执行匹配(然后检查实际匹配的长度),因为我想扩展此正则表达式以将字符串的其余部分与其他字符串匹配图案。

就示例而言,组的长度很小,但实际上却更长(因此,手动指定各种组合不是一种选择;自动生成包含所有组合的正则表达式使我担心性能)。

具体来说,我使用的是Python 3.6,但我对考虑其他正则表达式风格的解决方案感到满意。

您可以使用以下方法欺骗必须进行的轮换。

查看正则表达式在这里使用

\b[a-z]{1,4}\d{1,4}(?<=\b[a-z\d]{5})
  • \\b在单词边界处声明位置
  • [az]{1,4}匹配1至4次小写字母
  • \\d{1,4}匹配1到4次之间的数字
  • (?<=\\b[az\\d]{5})正向后方确保前面精确地包含5个小写字母和数字的组合

正则表达式无法计数,您需要使用以下替代形式:

\b([a-z][0-9]{4}|[a-z]{2}[0-9]{3}|[a-z]{3}[0-9]{2}|[a-z]{4}[0-9])\b

正则表达式演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM