此问题要我从传递的字符串中删除非数字值。
该问题还说:“请记住,数值可以有一个前导'+'或'-',而浮点数可以有一个小数点(但只能有一个小数点)。”
我不知道int可以以+或-开头。我该如何制作一个允许加号和-但只能在数字之前,小数点但只能在数字中间而不是其他位置的函数?
我到处都是StackOverflow,很多解决类似问题的方法都使用了我不熟悉的正则表达式。有没有办法用循环来做到这一点?
答案 0 :(得分:0)
您可以多次遍历您的字符串,而不必进行正则表达式。一次过滤掉非数字字符,然后再次验证字符串的其余部分是数字,并进行特殊检查以确保+
或-
是第一个字符,并且只有一个小数存在。
答案 1 :(得分:0)
import re
regex = r"^[+|-]?[0-9]*[.]?[0-9]+$"
test_str = ("t1est\n"
"23\n"
"foo\n"
"bar123\n"
"304958\n"
"bar\n"
"+123\n"
"-123.1\n"
"-4\n"
"4.5\n"
"1.2.3\n"
"2+3\n\n"
"4\n"
".8\n"
"-.8\n"
"3.1415\n"
"4,5")
matches = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))