三个数字的正则表达式

时间:2018-06-23 23:38:54

标签: python regex regex-lookarounds

我创建了一个正则表达式,该表达式可以匹配四位数字中任意顺序的两个数字。我正在尝试创建一个可以以任意顺序对四位数中的3个数字进行数学运算的正则表达式。以下是我目前用来匹配两个数字的内容:

regEx01 = re.compile(r'\b[0-9]*(?:0[0-9]*[0-9]?1|1[0-9]*[0-9]?0)[0-9]*\b')

017019中匹配80192160

未来的正则表达式必须匹配012

7012 positive
0190 negative
9201 positive
1226 negative

任何方向将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以使用基于正向回顾的正则表达式使其简洁:

\b(?=\d*0)(?=\d*1)(?=\d*2)\d+\b

请参见regex demo

详细信息

  • \b-单词边界
  • (?=\d*0)-正向超前,要求在零个或多个数字后加上0
  • (?=\d*1)-需要1
  • (?=\d*2)-需要2
  • \d+-1个以上数字
  • \b-单词边界

或者,要提高性能,请用“减法”值替换\d*

r'\b(?=[1-9]*0)(?=[02-9]*1)(?=[013-9]*2)\d+\b'

请参见this regex demo

在这里,(?=[1-9]*0)快速检查从01的0个数字后是否存在9(?=[02-9]*1)检查1(?=[013-9]*2)以类似的方式检查2