Я согласен с ответами, которые говорят об использовании групп захвата, но имеют немного другой подход к самому регулярному выражению. Обязательно используйте параметры gi (глобальные и без учета регистра), чтобы получить правильные результаты.
r"([45]G).*?([\d.]+).*?([\d.]+)"
Я включил ссылку на онлайн-тестер и отладчик регулярных выражений , который я использовал, потому что он очень хорошо объясняет отдельные элементы регулярных выражений, и я также скопировал в примере Python код, сгенерированный ниже.
import re
regex = r"([45]G).*?([\d.]+).*?([\d.]+)"
test_str = "Put in 3 extenders but by the 4th floor it is weak on signal these don't piggy back of each other. ST -99. 5G DL 624.26 UP 168.20 4g DL 2 Up .44"
matches = re.finditer(regex, test_str, re.IGNORECASE)
for matchNum, match in enumerate(matches, start=1):
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
Ваш фиктивный деструктор, как объявляют, возвращает пустой указатель, не пустоту. Это объявление не соответствует определению типа для Вашего указателя функции деструктора.
Определение типа должно быть:
typedef void *(*my_destructor)(void *);
Поскольку my_dummy_test возвращается пусто* вместо пустоты. Если Вы хотите возвратиться пусто*, определение типа должно быть
typedef void* (*my_destructor)(void *);