如何返回仅包含可以形成有效的int或float数的字符的字符串?

时间:2019-04-11 02:00:18

标签: python regex string

此问题要我从传递的字符串中删除非数字值。

该问题还说:“请记住,数值可以有一个前导'+'或'-',而浮点数可以有一个小数点(但只能有一个小数点)。”

我不知道int可以以+或-开头。我该如何制作一个允许加号和-但只能在数字之前,小数点但只能在数字中间而不是其他位置的函数?

我到处都是StackOverflow,很多解决类似问题的方法都使用了我不熟悉的正则表达式。有没有办法用循环来做到这一点?

2 个答案:

答案 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)))