我正在尝试为“用可选的多个空格或可选的单个逗号分隔的一位或两位数字序列”创建一个 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”就测试得很好。我应该如何编写我的正则表达式?
这个正则表达式应该可以工作 ^(\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*
。该组可以出现无限次(可选),因此*
和 后面跟着$
,即字符串的结尾。
归档时间: |
|
查看次数: |
21067 次 |
最近记录: |