如何验证字符在输入字符串中出现的次数?

时间:2018-12-05 14:20:01

标签: regex python-3.x validation while-loop

例如:我希望我的用户输入5个数字,并用逗号分隔...

如果我想确保逗号(,)只出现4次,否则他们将不得不重新输入字符串,我该如何验证呢?

示例问题:“请输入5个数字,所有数字之间用逗号分隔-”

错误答案:2,3或4,5,6,7,8,9

好的答案:2,3,4,5,6(4个逗号,5个数字)

我的想法是我应该使用正则表达式。如果还有其他想法,请分享。谢谢!

3 个答案:

答案 0 :(得分:2)

您不需要“正则表达式”,这可以通过基本的Python函数完成:

answer = '2,3,4,5,6'

split_answer = answer.split(',')
if len(split_answer) == 5 and all(number.strip().isdigit() for number in split_answer):
    print ('good answer')
else:
    print ('bad answer')

使用行answer.split(','),您可以测试在单个逗号分割后剩余的元素数量;使用all(..),您将测试这些元素中的每个元素是否仅由数字组成。其中的strip是为了确保首先删除周围的空白。

答案 1 :(得分:1)

您可以使用此正则表达式精确匹配5个逗号分隔的数字,

^\d+(?:,\d+){4}$

在这里

  • ^->输入开始
  • \d+->匹配一个或多个数字
  • (?:,\d+){4}->匹配一个逗号,后跟一个或多个数字,并且此模式恰好匹配4次。
  • $->输入结束

Demo

如果您的输入可能包含可选空格,则可以使用以下正则表达式。

^\s*\d+\s*(?:,\s*\d+\s*){4}$

这是python示例代码,

import re
arr = ['2,3','4,5,6,7,8,9','2,3,4,5,6']
for s in arr:
 if re.match(r'^\d+(?:,\d+){4}$', s): 
  print(s + ' --> Match')
 else: 
  print(s + ' --> Do not Match')

哪些印刷品

2,3 --> Do not Match
4,5,6,7,8,9 --> Do not Match
2,3,4,5,6 --> Match

答案 2 :(得分:0)

一种非常Python化的方式是:

sample = "1,3,23,12,"
if(len(sample.split(","))<sample.count(",")) and sample.count(",") ==4:
    return True
else:
    return False

如果在分隔符后缺少字符,上述方法将解决该错误。