我创建了一个正则表达式,该表达式可以匹配四位数字中任意顺序的两个数字。我正在尝试创建一个可以以任意顺序对四位数中的3个数字进行数学运算的正则表达式。以下是我目前用来匹配两个数字的内容:
regEx01 = re.compile(r'\b[0-9]*(?:0[0-9]*[0-9]?1|1[0-9]*[0-9]?0)[0-9]*\b')
在0
,1
,7019
中匹配8019
和2160
。
未来的正则表达式必须匹配0
,1
和2
。
7012 positive
0190 negative
9201 positive
1226 negative
任何方向将不胜感激。
答案 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'
在这里,(?=[1-9]*0)
快速检查从0
到1
的0个数字后是否存在9
,(?=[02-9]*1)
检查1
和(?=[013-9]*2)
以类似的方式检查2
。