我有一个输入字符串,其中包含由单个空格分隔的实数序列。字符串中只包含一个实数(没有空格)也是可以接受的。我的目标是检查字符串结构是否与以下内容匹配(按此顺序):
它应该完整地描述字符串。如果不是,它将打印一条错误消息并退出。
我^(-?\d+(\.?\d)*)( \1)*$
以为我目前的正则表达式是可以的,但即使在应有的时候它也不匹配。
我对此函数的代码如下所示:
import re
def structure_check(string):
structure = r"^(-?\d+(\.?\d)*)( \1)*$"
if re.match(structure,string):
return("OK")
else:
print("Input error")
exit()
它应该接受诸如:15 35 -45 8 -2.3 4564.18 56
等的字符串,但它根本不对应于输入中的更改(不匹配)。如果空格太多,放置不正确.
或-
,或者除数字,句点,破折号(-
)和空格之外还有其他字符,则该字符不应该匹配。
我也可以只用第一个组执行此操作,同时遍历通过按空格分割输入字符串创建的列表,但是我宁愿根据我的主要目标对其进行检查,因为我不必在验证中分割输入功能,并且还可以通过一起检查输入来节省更多的代码行(例如,是否有多余的空格或不支持的字符,我不得不另外检查)。
对不起,如果我错过任何回答的问题,我找不到适合我的Python问题的任何内容。如果您知道任何信息,请随时链接它们。谢谢,我是一个初学者,大约在昨天才开始为一个项目学习正则表达式。
具体来说,问题在于您的正则表达式( \1)*
。描述的含义是:组1中匹配的空间和字符串零次或多次因此,您的regexp将与以下内容匹配,例如:
15 15 15
-5.3 -5.3 -5.3 -5.3
等等。
要修复正则表达式,我将用实际的组替换组引用,如下所示:
^(-?\d+(\.?\d)*)( -?\d+(\.?\d)*)*$
我还要指出,此正则表达式允许数字具有多个小数点(例如,1.2.3
传递),但是我不确定这是否是故意的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句