Извлечь номер из строки в Python без повторного - PullRequest
0 голосов
/ 20 сентября 2018

Как я могу извлечь число из строки в Python без использования регулярных выражений?Я видел isinstance, но число могло измениться почти на что угодно.Есть идеи?

https://www.investopedia.com/articles/retirement/?page=6

Ответы [ 5 ]

0 голосов
/ 20 сентября 2018

Я знаю, что вам не нужно re, но на самом деле он очень мощный.Под капотом большинство библиотек используют re.Вот мое решение, чтобы справиться с этой ситуацией:

import re

url = "www.fake888.com/article/?article=123&page=9&group=8"

numbers = re.findall(r'(?<==)(\d+)', url)
print(f'Found: {" ".join(numbers)}')

varval = re.findall(r'(\w+)=(\d+)', url)
urldict = {}
for var in varval:
  urldict[var[0]] = var[1]

print(urldict)

Вывод

Found: 123 9 8
{'article': '123', 'page': '9', 'group': '8'}
0 голосов
/ 20 сентября 2018

Предполагается, что не существует нескольких блоков целых чисел (например, www.something212.com/page=?13)

. Вы можете попробовать использовать списочные выражения и str.isdigit()

url = 'https://www.investopedia.com/articles/retirement/?page=6'

digits = [d for d in url if d.isdigit()]

digit = ''.join(digits)

digit
>>> 6

Отредактировано: теперь работает сцифры выше 9

0 голосов
/ 20 сентября 2018

Если url всегда имеет этот формат только с цифрами в конце, вы можете сделать это:

s = 'https://www.investopedia.com/articles/retirement/?page=25'
new = []
k = list(s)
[new.append(i) for i in k if i.isdigit()]
print(''.join(new))
(xenial)vash@localhost:~/python/stack_overflow$ python3.7 isdigit.py
25
0 голосов
/ 20 сентября 2018

Вы можете извлечь непрерывные группы цифр в любом месте строки, используя следующее:

from itertools import groupby

url = 'https://www.investopedia.com/articles/retirement/?page=6&limit=10&offset=15'
print([int(''.join(group)) for key, group in groupby(iterable=url, key=lambda e: e.isdigit()) if key])

Выход

[6, 10, 15]
0 голосов
/ 20 сентября 2018

Это немного многословно, но я бы использовал для этого разбор URL.Преимущество каждого регулярного выражения в том, что вы получите бесплатную проверку ввода и более читаемый код.

>>> from urllib.parse import urlparse, parse_qs
>>> url = 'https://www.investopedia.com/articles/retirement/?page=6'
>>> parsed = urlparse(url)
>>> query = parse_qs(parsed.query)
>>> [page] = query['page']
>>> int(page)
6
...