代码之家  ›  专栏  ›  技术社区  ›  Kamikaze_goldfish

在python中从字符串中提取数字而不必重新

  •  1
  • Kamikaze_goldfish  · 技术社区  · 8 年前

    isinstance 但这个数字几乎可以变成任何数字。有什么想法吗?

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

    5 回复  |  直到 8 年前
        1
  •  1
  •   yvesva    8 年前

    这假设没有多个整数块(例如。 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
    

        2
  •  2
  •   wim    8 年前

    这有点冗长,但我会使用url解析。与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
    
        3
  •  2
  •   Dani Mesejo    8 年前

    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]
    
        4
  •  1
  •   vash_the_stampede    8 年前

    如果 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
    
        5
  •  0
  •   yoonghm    8 年前

    我知道你不需要 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'}