Regex 如何验证字符在输入字符串中出现的次数?
例如:我希望我的用户输入5个以逗号分隔的数字 如果我想确保逗号(,)只出现4次,否则他们将不得不再次输入字符串,我该如何进行验证 示例问题:“请输入5个数字,全部用逗号分隔——” 错误答案:2,3或4,5,6,7,8,9 好答案:2,3,4,5,6(4个逗号,5个数字)Regex 如何验证字符在输入字符串中出现的次数?,regex,python-3.x,validation,while-loop,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个数字) 我的想法是我应该使用正则表达式。如果有人有任何其他想法,请分享。谢谢 您可以使用此正则表达式精确匹配5个逗号分隔的数字 ^\d+(?:,\d+){4}$ 这里, ^-->开始输入 \d+-->匹配一个或多个数字 (?:,\d
我的想法是我应该使用正则表达式。如果有人有任何其他想法,请分享。谢谢 您可以使用此正则表达式精确匹配5个逗号分隔的数字
^\d+(?:,\d+){4}$
这里,
-->开始输入^
-->匹配一个或多个数字\d+
-->匹配逗号后跟一个或多个数字,此模式正好匹配4次(?:,\d+{4}
-->输入结束$
^\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
您可以使用此正则表达式精确匹配5个逗号分隔的数字
^\d+(?:,\d+){4}$
这里,
-->开始输入^
-->匹配一个或多个数字\d+
-->匹配逗号后跟一个或多个数字,此模式正好匹配4次(?:,\d+{4}
-->输入结束$
^\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
一种非常类似蟒蛇的方式是:
sample = "1,3,23,12,"
if(len(sample.split(","))<sample.count(",")) and sample.count(",") ==4:
return True
else:
return False
sample=“1,3,23,12,”
如果(len(sample.split(“,”)一种非常类似于python的方法是:
sample = "1,3,23,12,"
if(len(sample.split(","))<sample.count(",")) and sample.count(",") ==4:
return True
else:
return False
sample=“1,3,23,12,”
如果(len(sample.split(“,”)您不“需要”正则表达式,则可以使用基本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(…)
您可以测试这些元素中的每一个元素是否仅由数字组成。其中的条带是为了确保首先删除周围的空白。您不需要正则表达式,这可以通过基本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(…)
您测试这些元素中的每个元素是否仅由数字组成。其中的条带是为了确保首先删除周围的空白。是的,正则表达式在这里是一个合理的计划。是的,正则表达式在这里是一个合理的计划。没有前瞻性。您在哪里看到的?没有前瞻性。您在哪里看到的?回答很好但我觉得只有当所有输入的数字都是一位数时,这才会验证它是正确的答案。例如,如果用户输入1,2,35,6,7怎么办?这将返回一个大于5的长度,从而使它成为一个糟糕的答案。@ZachariaSalad:不,不会发生这种情况。您的示例输入也会返回“5”。试试看。答案不错,但我感觉不错这样,只有当所有输入的数字都是一位数时,才会验证它是否为正确答案。例如,如果用户输入1,2,35,6,7,则会返回长度大于5的结果,从而使其成为错误答案。@ZachariaSalad:不,不会发生这种情况。您的示例输入也会返回“5”。请尝试。