Давайте начнем с вашего регулярного выражения:
found = re.search(r'([+-]?(?:[0-9]*[,.])?[0-9]+)', item).group()
это работает, как вы упомянули. Нам нужно добавить %
в конце этого регулярного выражения как отрицательный прогноз
found = re.search(r'([+-]?(?:[0-9]*[,.])?[0-9]+)(?!%)', item).group()
что печатает:
10,10
8,42
20.0 # <---- note the last digit is missing here
поэтому, чтобы настроить это регулярное выражение в дальнейшем, нам нужно исключить целую числовую комбинацию, которую мы сопоставили (т. Е. ([+-]?(?:[0-9]*[,.])?[0-9]+)
), ЕСЛИ она заканчивается на %
.
Таким образом, мы получаем:
found = re.search(
r'([+-]?(?:[0-9]*[,.])?[0-9]+)(?!(?:%|(?:[+-]?(?:[0-9]*[,.])?[0-9]+)))',
item
).group
что дает то, что мы хотим:
10,10
8,42
1,68