Как вернуть строку, содержащую только символы, которые могут образовывать действительные числа типа int или float? - PullRequest
0 голосов
/ 11 апреля 2019

Эта проблема требует, чтобы я удалил нечисловые значения из переданной строки.

В вопросе также сказано: «Помните, что числовое значение может иметь начальные« + »или« - », а число с плавающей запятойимеют десятичную точку (но только одну десятичную точку). "

Я не знал, что у целых могут быть начальные + или -.Как я могу сделать функцию, которая разрешает + и и, но только перед цифрами и десятичными числами, но только в середине чисел, а не где-нибудь еще?

Я посмотрел вокруг StackOverflow и многоРешения для подобных проблем используют регулярные выражения, с которыми я не знаком.Есть ли способ сделать это с помощью петель?

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019
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)))
0 голосов
/ 11 апреля 2019

Вы можете перебрать вашу строку пару раз вместо выполнения регулярных выражений.Один раз отфильтровать нечисловые символы, затем еще раз проверить, что остаток строки является числом, со специальными проверками, чтобы убедиться, что + или - является первым символом и существует только один десятичный знак.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...