Извлечение чисел из строки в Python без регулярных выражений - PullRequest
0 голосов
/ 01 февраля 2020

Я хочу извлечь числа из следующего текста:

I am 25 years old and my pincode is 110092

над текстом без использования регулярного выражения, такого как \d+. Как я могу это сделать?

Ответы [ 4 ]

3 голосов
/ 01 февраля 2020

Разделите текст по пробелам и проверьте, является ли каждый фрагмент числом:

text = 'I am 25 years old and my pincode is 110092'
numbers = [int(s) for s in text.split() if s.isdigit()]

Какая сокращенная версия:

text = 'I am 25 years old and my pincode is 110092'
# create a list of words that are separated by spaces
split_text = text.split()
numbers = []
for fragment in split_text:
    # check if the text can be converted into a number
    if fragment.isdigit():
        # convert the string into an integer and add it to the list
        numbers.append(int(fragment))

>>> print(numbers)
[25, 110092]
0 голосов
/ 01 февраля 2020

в случае, если числа не разделены пробелами, вы можете проверить каждый символ отдельно. groupby из пакета itertools делает это относительно легко:

from itertools import groupby

s = "I am 25 years old and my pincode is 110092"

[int(''.join(gen)) for isdigits, gen in groupby(s, str.isdigit) if isdigits]

делает правильные вещи, а также делает правильные вещи, если ваша строка:

s = "a23b"

, который не сработает для ответов на основе split.

немного расширив это, мы можем определить функцию:

def get_grouped_digits(s):
    result = []
    for isgroupdigits, gen in groupby(s, str.isdigit):
        if isgroupdigits:
            result.append(int(''.join(gen)))
    return result
0 голосов
/ 01 февраля 2020

Вы можете использовать метод isdi git (). сначала разделите каждое слово в строке и поместите значения в список. затем в a для l oop проверьте каждое слово с помощью isdi git. если слово di git, оно возвращает True, если нет, возвращает False.

text ="I am 25 years old and my pincode is 110092"
a = text.split(" ")

for i in range (len(a)):
    if (a[i].isdigit()):
        print('yes,it is digit')
0 голосов
/ 01 февраля 2020
s="I am 25 years old and my pincode is 110092"
words=s.split(" ")
ints=[]
for w in words:
    try:
        ints+=[int(w)]
    except:
        pass

должен дать вам то, что вы хотите, но ответы, написанные в то время, когда я его составлял, кажутся более pythoni c

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