繁体   English   中英

从Python中的字符串中提取数字而无需重新

[英]Extract number from string in python without re

如何在不使用正则表达式的情况下从python中的字符串中提取数字? 我见过一个isinstance但人数几乎可以更改为任何事。 有任何想法吗?

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

这有点冗长,但是我会为此使用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

如果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]

假设没有多个整数块(例如, www.something212.com/page=?13

您可以尝试使用列表str.isdigit()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以上的数字

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM