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

2024-09-29 17:13:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我想匹配所有字符串,首先是1至4(小写)字母,然后是1至4位数字,该序列的总长度(字母+数字)应为5。字母和数字不能混在一起。然而,实际的字符串要长得多,这个5序列后面没有任何明显的单词边界(例如,它后面可以跟[a-z0-9])。然而,所讨论的正则表达式应该只与前5个字符有关。你知道吗

例如:

  • 阳性匹配:a1111aa111abc12defabc12345。。。你知道吗
  • 负匹配:a1a1aaa11aaa111aaaa x。。。你知道吗

所以我需要像^([a-z]{1,4})[0-9]{5 - length of \1}这样的东西。你知道吗

This question似乎有点关联,但我不知道如何使第二组的长度依赖于第一组。This answer建议对所有可能的字符进行前瞻性处理,但不能防止混淆。你知道吗

我不想只对字符串的前五个字符执行匹配(然后检查实际匹配的长度),因为我想扩充这个正则表达式,以便用其他模式匹配字符串的其余部分。你知道吗

出于示例的考虑,组的长度很小,但实际上要长得多(因此手动指定各种组合不是一个选项;自动生成包含所有组合的regex会让我担心性能)。你知道吗

具体来说,我使用的是python3.6,但我很高兴解决方案也考虑了其他regex风格。你知道吗


Tags: 字符串字母序列数字阳性this字符单词
2条回答

你可以用下面的方法来欺骗那些不得不做改变的人。你知道吗

See regex in use here

\b[a-z]{1,4}\d{1,4}(?<=\b[a-z\d]{5})
  • \b在单词边界断言位置
  • [a-z]{1,4}匹配1到4次之间的小写字母
  • \d{1,4}匹配1到4倍之间的数字
  • (?<=\b[a-z\d]{5})正的lookback确保前面正好有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

Regex Demo

相关问题 更多 >

    热门问题