从 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()
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'}
如何在不使用正则表达式的情况下从 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()
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'}