Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何验证字符在输入字符串中出现的次数?_Regex_Python 3.x_Validation_While Loop - Fatal编程技术网

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

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个以逗号分隔的数字

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

示例问题:“请输入5个数字,全部用逗号分隔——”

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

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


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

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

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

  • ^
    -->开始输入
  • \d+
    -->匹配一个或多个数字
  • (?:,\d+{4}
    -->匹配逗号后跟一个或多个数字,此模式正好匹配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+
    -->匹配一个或多个数字
  • (?:,\d+{4}
    -->匹配逗号后跟一个或多个数字,此模式正好匹配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”。请尝试。