Как я могу извлечь число из строки в python без использования регулярного выражения? Я видел isinstance
но число может измениться почти на все. Есть идеи?
https://www.investopedia.com/articles/retirement/?page=6
Это предполагает, что не существует нескольких блоков целых чисел (например, 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
[6,12]
. Вы можете присоединиться к ответу, используя number = ''.join(map(int, digits))
Это немного многословно, но я бы использовал разбор URL для этого. Преимущество overy regex состоит в том, что вы получите некоторую проверку ввода для свободного и более читаемого кода.
>>> 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
Если 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
Вы можете извлекать непрерывные группы цифр в любом месте строки, используя следующее:
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]
Я знаю, что вам не нужно 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'}
page
...