我应该如何为一位/两位数字序列编写 python 正则表达式?

die*_*lar 6 python regex

我正在尝试为“用可选的多个空格或可选的单个逗号分隔的一位或两位数字序列”创建一个 python 正则表达式。

例如:

"   1"  Should tests good
"    1  2     3 3  4 5 7 17" Should test good
" 1, 2,3,11,74" Should test good
"1,11,14, 15" Should test good

"111, 101" Should not test good
"1 2 3  a" Should not test good
"1, 25, 5.0 " Should not test good
"1,, 7, 80" Should not test good
"1,11,14," Should not test good
Run Code Online (Sandbox Code Playgroud)

逗号符号只能出现在数字(或空格)之间。这就是为什么最后一个例子测试不理想的原因。

我尝试过这个

^\s*\d{1,2}(\s*\,?\d{1,2}\s*\,?)*\s*$
Run Code Online (Sandbox Code Playgroud)

但得到的结果并不好,例如“11111”就测试得很好。我应该如何编写我的正则表达式?

Moi*_*ker 5

这个正则表达式应该可以工作 ^(\s*\d{1,2}\s*$)|^((\s*\d{1,2}\s*[\,\s]\s*\d{1,2}\s*))+([\,\s]\s*\d{1,2}\b\s*)*$。请注意,要捕获 1 到两次之间的数据,请使用{1,2},其中逗号之前的数字是下限,而逗号之后的数字是上限。它的工作方式是我们要么捕获^(\s*\d{1,2}\s*$)要么^((\s*\d{1,2}\s*[\,\s]\s*\d{1,2}\s*))+([\,\s]\s*\d{1,2}\b\s*)*$。对于第一个选项,我们首先查找 String 的开头^。接下来,我们寻找一个可选的无限量的空间,\s*后跟一些一位或两位数字(\d{1,2}),然后是一个可选的无限量的空间,然后是 String 的末尾$。对于第二个选项,我们允许可选的无限空间\s*后跟一位或两位数字\d{1,2},后跟可选的无限量空间\s*。接下来我们允许使用逗号或空格[\,\s]。然后我们再次允许可选的无限空格\s*,后跟一位或两位数字\d{1,2},最后是可选的无限空格\s*。这必须至少发生一次+才能被视为匹配(仅空格或以逗号开头的任何内容都不会匹配)。它后面可以跟一个逗号或空格[\,\s],再跟一个无限量的空格\s*,最后跟一个一位或两位数字\d{1,2}。接下来是边界\b和可选的无限量空间s*。该组可以出现无限次(可选),因此*和 后面跟着$,即字符串的结尾。